我有一个数组,我想排序.数组A的每个元素都是一个有3个元素的数组.
阵列A看起来像:
阵列A看起来像:
my @A = ([2,3,1],[1,2,3],2],[3,1,[2,4]);
我想按顺序排列A.当比较2个元素时,使用第一个数字.如果有领带,则使用第二个数字,然后是第三个数字.
sub cmpfunc { return ($a->[0] <=> $b->[0]) or ($a->[1] <=> $b->[1]) or ($a->[2] <=> $b->[2]); } my @B = sort cmpfunc @A; print "Result:\n"; for my $element (@B) { print join(",",@{$element}) . "\n"; }
结果:
1,3 1,2 2,1 2,4 3,2
结果有点分类,但不正确.我期待的是:
1,2 1,3 2,4 2,1 3,2
我的比较功能有什么错误吗?
奇怪的是,当我将比较代码放在块中时,结果被正确排序.
my @C = sort { ($a->[0] <=> $b->[0]) or ($a->[1] <=> $b->[1]) or ($a->[2] <=> $b->[2]) } @A;