Для сравнения каждого элемента массива, что я знаю, такие же длины (и которые имеют предсказуемый порядок) в Perl мы имеем each_arrayref
, которые могут быть добавлены к полезным подпрограммам или просто использовать непосредственно:Простого сравнения поэлементны массивы с помощью операторов
use List::AllUtils qw/each_arrayref/;
my ($arr1, $arr2) = ([10, 31, 12], [20, 21, 14]);
my $iterate_elems = each_arrayref($arr1, $arr2);
while (my ($x, $y) = $iterate_elems->()) {
say $x lt $y ? "$x is lower " : "$x is higher" ;
}
или один-lineishly для вырезания и вставки:
perl -MList::AllUtils=each_arrayref -E '
my $iter = each_arrayref([10, 31, 12], [20, 21, 14]);
while (my ($x, $y) = $iter->()){
say $x lt $y ? "$x lower" : "$x higher"}'
Но это кажется чуть неуклюжий и не совсем надежной. Я пытаюсь использовать описательный термин, например $iterate_elems
, в качестве ссылки на функцию итерации. Возможно, я не использую это достаточно, чтобы это казалось очевидным.
В perl6 есть metaoperators, которые позволяют использовать все виды довольно сжатых и крутых списков сравнения и рутинга. Это заставляет меня думать, что для этого нужно использовать перегрузку оператора в perl5. Может ли кто-нибудь прокомментировать эту мудрость? Похоже, что было бы легче понять код, написанный таким образом, который применяет операторы к ряду списков, а не итерации по спискам для применения операторов. Возможно, творческое использование map
или List::MoreUtils
's apply
достигнет того же.
Удивительные образцы кода perl6 особо приветствуются.
Возможно, мне не хватает точки вашего вопроса, но ... Если вы знаете, что длина такая же, что не так с 'для my $ i (0 .. $ # array1) {say $ array1 [$ i ], $ array2 [$ i]; } '? – ThisSuitIsBlackNot
Как правило, массив или список будут намного больше, и можно захотеть сделать больше сравнений элементов, которые, как я полагаю, должны сделать «each_arrayref». Но да, проще, когда это возможно. –
Думаю, я все еще не понимаю. Как бы массив с большим количеством элементов или необходимость большего сравнения изменил логику в цикле? Возможно, более конкретный пример в порядке ... – ThisSuitIsBlackNot