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