作者reizarc (零式札克)
看板perl
标题Re: 排序问题
时间Tue Oct 24 01:06:33 2006
※ 引述《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)