Sıralamak istediğim bir dizi dizim var. A dizisinin her elemanı 3 öğeli bir dizidir. Ben artan düzende bir sıralamak istiyorumPerl dizisini sıralamak istiyorum, ancak sonuç sıralanmamış
my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,2,4]);
: gibi Dizi A görünüyor. 2 elemanı karşılaştırırken, ilk sayı kullanılır. Bir kravat varsa, ikinci sayı kullanılır ve daha sonra üçüncü sayı.
İşte kodum. 2 elemanı karşılaştırmak için 'cmpfunc' işlevini kullanıyorum.
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";
}
Sonuç:
1,2,3
1,0,2
2,3,1
2,2,4
3,1,2
sonuç biraz sınıflandırılır ancak doğru değildir. Beklediğim şey:
1,0,2
1,2,3
2,2,4
2,3,1
3,1,2
Karşılaştırma işlevimde herhangi bir hata var mı? Tuhaf olan şey, karşılaştırma kodunu blokta koyduğumda, sonuç doğru şekilde sıralanıyor. Bunu "veya" arasındaki maddelerden herhangi birine girmeden önce döner
return ($a->[0] <=> $b->[0])
yürütme
sub cmpfunc {
return (($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]));
}
İlgili: http://stackoverflow.com/questions/1512547 – mob