Mam tablicę tablic, które chcę posortować. Każdy element tablicy A jest tablicą z 3 elementami. tablicy A wygląda następująco:Chcę sortować tablicę tablic w Perlu, ale wynik nie jest sortowany
my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,2,4]);
chcę sortować w porządku rosnącym. Porównując 2 elementy, używana jest pierwsza liczba. W przypadku remisu używa się drugiego numeru, a następnie trzeciego numeru.
Oto mój kod. Używam funkcji "cmpfunc" do porównania 2 elementów.
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";
}
Wynik:
1,2,3
1,0,2
2,3,1
2,2,4
3,1,2
Wynik jest nieco sortowane, ale nie są poprawne. Oczekuję:
1,0,2
1,2,3
2,2,4
2,3,1
3,1,2
Czy jest jakiś błąd w mojej funkcji porównania? Dziwne jest to, że kiedy umieszczam kod porównania w bloku, wynik jest poprawnie sortowany.
my @C = sort { ($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]) } @A;
Powiązane: http://stackoverflow.com/questions/1512547 – mob