Re: [問題] 關於排序

看板Perl作者 (Art of Life)時間18年前 (2007/07/19 19:12), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串6/18 (看更多)
※ 引述《WalkingIce (會走路的冰塊)》之銘言: : 如果拿 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 : 啊?什麼?資料輸出的長相不一樣? : 那...那就同樣的技倆再玩一次啊! 其實我的方法很簡單耶...@@.....不知道是不是我會錯意了.... ########程式碼################ open f,"<ttt.txt"; while($line=<f>){ $hash{${[split/\t/,$line]}[1]}=$line; } close f; for $key(sort keys %hash){ print $hash{$key} ; } ############################## 這樣做出來就不會破壞原本的資料格式.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.50.103

07/19 21:40, , 1F
嗯嗯 這也是一個好方法 不過hash的memory會比較大一些
07/19 21:40, 1F
文章代碼(AID): #16dqSOW_ (Perl)
討論串 (同標題文章)
文章代碼(AID): #16dqSOW_ (Perl)