我有一个浮点数数组:(.25, .45, .15, .27)。我想将每个元素彼此相乘,而不是除以数组元素的数量。
foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;
这会产生值 0。不确定我的语法是否正确。
我有一个浮点数数组:(.25, .45, .15, .27)。我想将每个元素彼此相乘,而不是除以数组元素的数量。
foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;
这会产生值 0。不确定我的语法是否正确。
您的语法是正确的,但是您$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
还有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
and的警告$b
,这里有一个关于 Perl 僧侣关于如何使它们静音的帖子。
迟到的答案,但可能有点 Perl-ish:
my @array = (3, 5, 4, 7);
my $score = 1;
$score *= $_ for @array;
print ($score / @array), "\n";
请注意,最好不要使用它,$numelements
因为不能保证 value 存储数组的长度。只需@array
在标量上下文中使用,您就可以免费获得数组的长度。