我有一個我想排序的數組數組。數組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