Или более старая кавычка, подобная тому, что сказал Joao:
"Жемчуг использования. Вы захотите знать удар, но не использовать его".
Печально я забыл, кто сказал это.
И да в эти дни я рекомендовал бы Python по жемчугу.
для Perl 5:
use List::MoreUtils 'pairwise';
@sum = pairwise { $a + $b } @arr1, @arr2;
Если вы используете Perl 6:
@a = (1 0 0 0 1) <<+>> (1 1 0 1 1) #NB: the arrays need to be the same size
В Адвент-календаре Perl 6 есть больше примеров.
По сути, нет, вы не можете сделать это без «цикла по массивам», потому что вам нужно получить доступ к каждому элементу обоих массивов, чтобы их суммировать. Оба ответа до сих пор просто скрывают цикл под слоем абстракции, но он все еще существует.
Если вас беспокоит цикл по очень большим массивам, вероятно, лучше подумать о других способах поддержания актуальности суммы как вы идете.
что не так с циклом над массивами? это основы.
@arr1 = ( 1, 0, 0, 0, 1 );
@arr2 = ( 1, 1, 0, 1, 1 );
for ($i=0;$i<scalar @arr1;$i++){
print $arr[$i] + $arr2[$i] ."\n";
}
Вы видели цикл for в стиле C и попарно
. Вот идиоматический Perl для цикла и map
:
my @arr1 = ( 1, 0, 0, 0, 1 );
my @arr2 = ( 1, 1, 0, 1, 1 );
my @for_loop;
for my $i ( 0..$#arr1 ) {
push @for_loop, $arr1[$i] + $arr2[$i];
}
my @map_array = map { $arr1[$_] + $arr2[$_] } 0..$#arr1;
Мне больше всего нравятся map
и попарно
. Я не уверен, что предпочитаю эти два варианта. попарно
обрабатывает некоторые скучные детали сантехники, но это не встроенная карта вроде
. С другой стороны, решение карты очень идиоматично и может быть непонятно для работающего неполный рабочий день.
Итак, ни у одного из подходов нет реальных выигрышей. IMO, как попарно
, так и карта
хороши.
Если вы действительно боитесь зацикливания, вы можете двоично разделить массивы, суммировать пары, а затем рекурсивно собрать полученный массив. Здесь нет циклов, а в качестве бонуса вы узнаете, как работает часть вывода быстрого преобразования Фурье.