Dmy*_*nko 14 arrays perl sum elementwise-operations
我有两个数组:
@arr1 = ( 1, 0, 0, 0, 1 );
@arr2 = ( 1, 1, 0, 1, 1 );
Run Code Online (Sandbox Code Playgroud)
我想总结两个数组的项目,以获得新的数组
( 2, 1, 0, 1, 2 );
Run Code Online (Sandbox Code Playgroud)
我可以不循环遍历数组吗?
cat*_*alk 29
对于Perl 5:
use List::MoreUtils 'pairwise';
@sum = pairwise { $a + $b } @arr1, @arr2;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Perl 6:
@a = (1 0 0 0 1) <<+>> (1 1 0 1 1) #NB: the arrays need to be the same size
Run Code Online (Sandbox Code Playgroud)
在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";
}
Run Code Online (Sandbox Code Playgroud)
你已经看过循环的C风格了pairwise.这是一个惯用的Perl for循环和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;
Run Code Online (Sandbox Code Playgroud)
我喜欢map和pairwise最好的.我不确定我在这两个选项之间有偏好. pairwise处理一些无聊的管道细节,但它不是内置的map.另一方面,地图解决方案非常惯用,并且可能对兼职人员不透明.
所以,两种方法都没有真正的胜利.国际海事组织,这两个pairwise和map好.