我想将哈希的所有值相乘,而不必调用特定元素。例如。我 DON' T 想做$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'}
,因为我不知道哈希中的元素数量来做到这一点。
我猜测有一个简单有效的功能,可能使用each
或其他东西,但我找不到任何可以遵循的例子。有什么想法吗?
答案 0 :(得分:9)
从1开始(因为1乘以任何东西就是你所乘的那个),然后循环遍历散列的值,并将当前总值乘以散列中的值。
#!/usr/bin/env perl
use v5.12;
my %hash = ( a => 1, b => 2, c => 3, d => 4 );
my $value = 1;
$value = $value * $_ foreach values %hash;
say $value;
答案 1 :(得分:9)
这是List::Util reduce 的用途:
use List::Util 'reduce';
my %hash = (foo => 3, bar => 7, baz => 2);
say reduce { our $a * our $b } values %hash;
输出:
42
答案 2 :(得分:4)
我会像这样迭代keys %hash
:
my $prod = 1;
$prod *= $hash{$_} for keys %hash;
答案 3 :(得分:2)
这不会吗?
my $m = 1;
for (values %my_hash) {
$m *= $_;
}