У меня есть массив массивов, которые я хочу сортировать. Каждый элемент массива A представляет собой массив с 3 элементами. Массив A выглядит так:
my @A = ([2,3,1], [1,2,3], [1,0,2], [3,1,2], [2,2,4]);
Я хочу сортировать A в порядке возрастания. При сравнении двух элементов используется первое число. Если есть галстук, используется второе число, а затем третье число.
Вот мой код. Я использую функцию 'cmpfunc' для сравнения двух элементов.
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
Есть ли ошибка в моей функции сравнения? Странная вещь: когда я помещаю код сравнения в блок, результат корректно сортируется.
my @C = sort { ($a->[0] <=> $b->[0]) or
($a->[1] <=> $b->[1]) or
($a->[2] <=> $b->[2]) } @A;