Re: 排序問題
※ 引述《reizarc (零式札克)》之銘言:
: my @a = ( "abc 1 6 3 1 5 6", # data input
: "def 2 5 5 1 8 3",
: "ghi 4 7 2 0 8 9",
: "jkl 4 5 5 1 8 2",
: "mno 2 7 5 1 8 9",
: "pqr 1 6 5 1 8 3" );
: @a = map{ $_->[ 0 ] } # 轉回
: sort{ $a->[ 4 ] <=> $b->[ 4 ] or # 排序
: $a->[ 2 ] <=> $b->[ 2 ] or
: $a->[ 3 ] <=> $b->[ 3 ] }
: map{ [ $_, split ] } @a; # 轉換
因為有高手建議更佳的 GRT 轉換解法
看了一下之後發現也非常有趣
我把同樣的問題的解法寫在下面
讓自己練習也希望對大家有玩排序時有幫助 :p
my @a = ( "abc 1 6 3 1 5 6", # data
"def 2 5 5 1 8 3",
"ghi 4 7 2 0 8 9",
"jkl 4 5 5 1 8 2",
"mno 2 7 5 1 8 9",
"pqr 1 6 5 1 8 3" );
@a =
@a[ map{ unpack "N", substr( $_, -4 ) } # 轉回來
sort
map{ pack( "NNNN", # 轉換成字串
( split " ", $a[ $_ ] )[ 3, 1, 2 ], $_ )
} ( 0 .. $#a ) ];
像這樣把全部的問題都轉換成最有效率的 ascii 排序
應該是 GRT 作法的重點所在
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.170.17
※ 編輯: reizarc 來自: 61.216.170.17 (10/24 01:26)
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章