Re: [問題] 關於排序
我講重點就好
@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
07/20 10:42, 1F
推
07/20 10:45, , 2F
07/20 10:45, 2F
推
07/20 10:48, , 3F
07/20 10:48, 3F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章