所以,我有一个这样的数组my @array= ( '1/22', '1/3', '1/15', '1/24', '2/1', '3/47' );
排序时应显示为1 / 3,1 / 15,1 / 22,1 / 24,2 / 1,3 / 47。但是,根据我在perl中的研究,我对Schwartzian变换或sort命令的尝试导致1/22将在1/3之前出现的问题。
这对我没有任何意义,因为join命令会导致13,(如果我理解正确的话)应该在122之前排序。
我使用的具体行是@array= sort { join('', (split '/', $a)[0,1]) cmp join('', (split '/', $b)[0,1]) } @array
我到底需要做些什么?我认为这种情况也应该因为类似的原因而失败,例如2/4。
答案 0 :(得分:5)
sort {
my @a = split('/', $a);
my @b = split('/', $b);
$a[0] <=> $b[0] or
$a[1] <=> $b[1]; } @list
答案 1 :(得分:1)
使用Sort::Naturally是最简单的方法:
@array = Sort::Naturally::nsort(@array);
虽然要完成我认为您打算加入的内容,但您可以这样做:
sprintf('%02d%02d', (split '/', $a)[0,1]) cmp sprintf('%02d%02d', (split '/', $b)[0,1])
(如果需要,增加2的宽度)。