我有一个我想排序的数组数组。数组A的每个元素都是一个包含3个元素的数组。 阵列中的样子:我想在Perl中对数组的数组进行排序,但结果没有排序
my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,2,4]);
我想排序按升序排列。比较2个元素时,使用第一个数字。如果有平局,则使用第二个数字,然后使用第三个数字。
这是我的代码。我使用函数'cmpfunc'来比较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,2,3
1,0,2
2,3,1
2,2,4
3,1,2
结果有所排序,而不是正确的。我期望的是:
1,0,2
1,2,3
2,2,4
2,3,1
3,1,2
我的比较函数中是否有任何错误? 奇怪的是,当我将比较代码放在块中时,结果正确排序。
sub cmpfunc {
return (($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]));
}
相关:http://stackoverflow.com/questions/1512547 – mob 2012-01-13 15:49:36