Хотя я согласен с Евгением y и 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];
, но я попытался уменьшить количествокопирования-вставки необходимо, даже за счет некоторого слегка волосатого синтаксиса.Чем больше вы знаете ...