Хотя я согласен с Женей у и MvanGeest, что обычно лучший ответ должен переключиться на другую структуру данных, иногда вы можете хотите параллельные массивы (или, по крайней мере, не может быть в состоянии избежать их), и на самом деле является способом параллельного параллельного параллельного массива. Это выглядит следующим образом:
my @nums = (7, 2, 9);
my @names = qw(seven two nine);
my @roman = qw(VII II IX);
my @sorted_indices = sort { $nums[$a] <=> $nums[$b] } 0..$#nums;
@$_ = @{$_}[@sorted_indices] for \(@nums, @names, @roman);
То есть, создать список из индексов, которые соответствуют всем массивам, а затем отсортировать их в соответствии с порядком, в котором будет «первичным» массив в порядке. Когда у нас есть отсортированный список индексов, переупорядочивайте все массивы, чтобы они совпадали.
Последняя строка может быть записан в обычное письме
@nums = @nums[@sorted_indices];
@names = @names[@sorted_indices];
@roman = @roman[@sorted_indices];
, но я пытался уменьшить количество копий пасты необходима, даже цену некоторых слегка волосатого синтаксиса. Больше, что вы знаете ...
Я бы использовал сложную структуру данных для этих данных (массив массивов, массив хашей или, возможно, хэш массивов/Hashe с). – MvanGeest