I have two arrays:
@arr1 = ( 1, 0, 0, 0, 1 );
@arr2 = ( 1, 1, 0, 1, 1 );
I want to sum items of both arrays to get new one like
<
for Perl 5:
use List::MoreUtils 'pairwise';
@sum = pairwise { $a + $b } @arr1, @arr2;
You've seen a C style for loop, and pairwise
. Here's an idiomatic Perl for loop and 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;
I like map
and pairwise
best. I'm not sure that I have a preference between those two options. pairwise
handles some boring details of plumbing for you, but it is not a built-in like map
. On the other hand, the map solution is very idiomatic, and may be opaque to a part-time perler.
So, no real wins for either approach. IMO, both pairwise
and map
are good.
I'm not sure what you plan to do with the sum once you have it, but you plan to do more vector-y type stuff, then Math::Matrix might be a good fit.
use Math::Matrix;
my $foo = Math::Matrix->new([ 1, 0, 0, 0, 1 ]);
my $bar = Math::Matrix->new([ 1, 1, 0, 1, 1 ]);
my $sum = $foo->add($bar);