1

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

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

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

4

3 回答 3

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
于 2013-08-20T05:32:29.867 回答
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;

如果你遇到关于$aand的警告$b这里有一个关于 Perl 僧侣关于如何使它们静音的帖子。

于 2013-08-20T05:41:13.453 回答
5

迟到的答案,但可能有点 Perl-ish:

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

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

现场演示

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

于 2013-08-20T05:42:16.860 回答