Re: [問題] 關於排序

看板Perl作者 (會走路的冰塊)時間17年前 (2007/07/19 16:56), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串5/18 (看更多)
※ 引述《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
請上網找 Schwartzian轉換 與 GRT轉換 的使用方式:)
07/19 18:09, 1F
文章代碼(AID): #16doT5H- (Perl)
討論串 (同標題文章)
文章代碼(AID): #16doT5H- (Perl)