Re: [問題] 關於排序
※ 引述《handsomegirl (薰)》之銘言:
: ※ 引述《abliou (Art of Life)》之銘言:
: : 欄位資料取出做成hash的key
: : 再對key做排序
: 不過的欄位資料不單是在第一列才有
: 它是把一部份的資料顯示完後
: 再繼續下個部分的欄位
: 舉例好了,我說的好像有點難懂
: 抱歉 剛才舉錯例子
: 應該是這樣才對
: A NO1 2006/10/10 18:36
: B NO2 2007/12/12 16:37
: . . . .
: . . . .
: G NO2 2007/12/13 17:20
: 這是一個檔案的內容
: 基本上應希望以NO排序,因為可以區分是哪一個NO的狀態
: 檔案原本是CSV我把它全部讀取出來變成這樣子
: 怎麼做hash~就不大理解了..
如果拿 NO 來做 hash 的 key
那 row B 跟 row G 只會剩下一個吧?!
我也遇過類似的問題,那時候第一個想法就是想要像 java 一樣
全部弄成 object,然後針對 object 的某個值來做比較 [註]
只是我不會用 Perl 這樣寫,而且我也不會 Perl 的OO (泣)
[註] http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html
然後,我又繼續用土砲的方式 (對不起,我是鄉民)
當每一行我要排序的資料都放入陣列之後,我把那些資料的順序調動
把我想要拿來比較的欄位放到最前面,接著 sort 一次
my @unsort;
foreach $line(@array) {
# 很醜的正規表示式, 自己再改一下吧 #
# 我想拿第二個欄位來比較,所以把 $2 放到最前面 #
my $new = "$2--$1--$3--$4\n" if $line =~m{(.)\s+(.+)\s\s\s(.+)\s(.+)};
push(@unsort,$new);
}
@sort = sort @unsort;
print @sort;
排序前
A NO1 2006/10/10 18:36
B NO2 2007/12/12 16:37
C NO3 2007/12/13 17:40
D NO1 2005/01/01 00:01
G NO2 2007/12/13 17:20
程式執行結果
NO1--A--2006/10/10--18:36
NO1--D--2005/01/01--00:01
NO2--B--2007/12/12--16:37
NO2--G--2007/12/13--17:20
NO3--C--2007/12/13--17:40
啊?什麼?資料輸出的長相不一樣?
那...那就同樣的技倆再玩一次啊!
--
我承認,這樣的土砲方法很沒有水準.....Orz
--
我想你會衰成這樣都是我害的
---- Tizzy Mac
緊張的麥金塔?這是誰(._.?)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.128.98.6
推
07/19 18:09, , 1F
07/19 18:09, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
2
2
以下文章回應了本文:
問題
1
1
完整討論串 (本文為第 5 之 18 篇):
問題
2
2
問題
1
1
問題
1
1
問題
1
1
問題
3
4
問題
3
3