Re: [問題] 關於排序

看板Perl作者 (四年前兩年後)時間18年前 (2007/07/20 10:27), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串9/18 (看更多)
我講重點就好 @data = map { substr $_ ,3 } sort map { [split " "]->[1].$_ } @data; 其實寫法等同於 @data = map { [split " "]->[1].$_ } @data; @data = sort @data; @data = map { substr $_ , 3 } @data; 當執行第一列程式碼時 我故意把NO* 這個欄位擺到前面來 split " " 是切割原本每一個列的字串 ( Row跟Column常常會被誤用 ) "A NO1 2006/10/10 18:36" 變成一個匿名陣列 ["A","NO1","2006/10/10 18:36"] 然後取出陣列1的資料NO* 尾巴還得加上原始的資料,其實有其他作法,例如加上原始的陣列位置 不擺原始資料,我說過,寫法可以有很多種^^ 這邊我只舉這個範例 其目的是在於經過排序過程,原始資料會跟著一起動,不管是GRT或者 Schwartzian轉換的精神是在於這邊(Schwartzian轉換通常以匿名陣列加在前面) 經過map資料會變成 NO1A NO1 2006/10/10 18:36 NO2B NO2 2007/12/12 16:37 NO3C NO3 2007/12/13 17:40 NO1D NO1 2005/01/01 00:01 NO2G NO2 2007/12/13 17:20 特別注意一點,這邊的NO*欄位長度都是固定的,如果不固定要自己padding 例如使用pack來padding 當執行第二列程式碼時,資料會進行排序 NO1A NO1 2006/10/10 18:36 NO1D NO1 2005/01/01 00:01 NO2B NO2 2007/12/12 16:37 NO2G NO2 2007/12/13 17:20 NO3C NO3 2007/12/13 17:40 當執行第三列程式碼時,目的就是把前面的NO*給刪除,因此使用substr A NO1 2006/10/10 18:36 D NO1 2005/01/01 00:01 B NO2 2007/12/12 16:37 G NO2 2007/12/13 17:20 C NO3 2007/12/13 17:40 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.71.35 ※ 編輯: LiloHuang 來自: 140.114.71.35 (07/20 10:29)

07/20 10:42, , 1F
前面欄位不固定的問題,split可以從後面切回來嗎?
07/20 10:42, 1F

07/20 10:45, , 2F
你直接給個範例給我看,我不懂你為何要從後面切回來
07/20 10:45, 2F

07/20 10:48, , 3F
L大好威~
07/20 10:48, 3F
文章代碼(AID): #16e1rsXK (Perl)
討論串 (同標題文章)
文章代碼(AID): #16e1rsXK (Perl)