将数组的每个元素相互相乘

时间:2013-08-20 05:29:56

标签: perl

我有一个浮点数组:(。25,。45,。15,.27)。我想将每个元素相互乘以除以数组元素的数量。

foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;

这会产生值0.不确定我的语法是否正确。

3 个答案:

答案 0 :(得分:6)

您的语法是正确的,但每次循环时都会初始化$score变量,每次迭代都会将其设置为0。只需将它移到循环外面就可以了:

my $score = 1 #Need to initialize to 1 for multiplying
foreach my $element (@array) {
    $score *= $element;
}
$score = $score/$numofelements; #Assuming $numofelements is set already

答案 1 :(得分:6)

还有List::Util路线。

use List::Util qw(reduce);

my @array = (.25, .45, .15, .27);
my $mult = reduce { $a * $b } 1, @array;
my $score = $mult / @array;

如果您遇到关于$a$b的警告,here是Perl僧侣关于如何使他们沉默的话题。

答案 2 :(得分:5)

迟到的回答,但也许更多Perl-ish:

my @array = (3, 5, 4, 7);

my $score = 1;
$score *= $_ for @array;
print ($score / @array), "\n";

Live demo

请注意,最好不要使用$numelements,因为无法保证值存储数组的长度。只需在标量上下文中使用@array,即可免费获得数组的长度。