我有一个浮点数组:(。25,。45,。15,.27)。我想将每个元素相互乘以除以数组元素的数量。
foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;
这会产生值0.不确定我的语法是否正确。
答案 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";
请注意,最好不要使用$numelements
,因为无法保证值存储数组的长度。只需在标量上下文中使用@array
,即可免费获得数组的长度。