在Perl中将哈希中的所有值相乘?

时间:2012-09-13 09:29:13

标签: perl hash key-value multiplication

我想将哈希的所有值相乘,而不必调用特定元素。例如。我 DON' T 想做$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'},因为我不知道哈希中的元素数量来做到这一点。

我猜测有一个简单有效的功能,可能使用each或其他东西,但我找不到任何可以遵循的例子。有什么想法吗?

4 个答案:

答案 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 *= $_;
}