如何在Perl中找到两个不同数组的所有值的总和?

时间:2010-03-24 21:23:46

标签: perl arrays sum

如何在Perl中找到两个不同数组中所有值的总和?

@array1 = (1, 2, 3);
@array2 = (10, 10, 10);

@sumofarray1and2 = ?

所以我想我可以在这里做两件事。我可以执行两个foreach循环,然后首先添加@array1@array2的内容,然后获取两者的总和。

6 个答案:

答案 0 :(得分:9)

my $sum = 0;
$sum += $_ for (@array1, @array2);

答案 1 :(得分:3)

由于两个列表的总和已经在这里,这就是如何对列表元素进行求和:

my @sums = map {$array1[$_] + $array2[$_]} 0 .. $#array1;

这假定列表的长度相同。

此代码使用map函数将其块应用于列表,并根据块的返回值生成新列表。显示的块将在索引$_处添加每个数组的元素。 $_map设置为其传入列表的值。 $#array1是最后一个元素的索引,在本例中为2.这使得列表传递到地图(0, 1, 2)

答案 2 :(得分:2)

use List::Util qw(sum);
@array1=(1,2,3);
@array2=(10,10,10);
print sum(@array1, @array2);

答案 3 :(得分:1)

对于求和,请使用List::Util。对于“两个数组”,只需将它们放在一个列表中,您就会得到所有值的列表。

#!/usr/bin/perl

use strict;
use warnings;
use List::Util;

my @foo = (1,2,3);
my @bar = (4,5,6);

print List::Util::sum(@foo, @bar), "\n";

答案 4 :(得分:1)

另一种方法是使用fold系列,例如reduce

#! /usr/bin/perl -l

use List::Util qw/ reduce /;

@array1 = (1, 2, 3);
@array2 = (10, 10, 10);

print reduce { $a + $b } @array1, @array2;

答案 5 :(得分:0)

#!/usr/bin/perl
use strict;
use warnings;

use List::Util qw( sum );
use List::MoreUtils qw( pairwise );

our ($a, $b);
my @array1 = (1, 2, 3);
my @array2 = (10, 10, 10);

my @sum = pairwise { $a + $b } @array1, @array2;

printf "%s : %d\n", "@sum", sum @sum;

输出:

C:\Temp> s
11 12 13 : 36