0

我想将哈希的所有值相乘,而不必调用特定元素。例如,我不想这样做,因为我不知道哈希中的元素数量来执行此操作$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'}

我猜有一个简单而有效的功能可以做到这一点,也许是使用each或其他东西,但我找不到任何可以遵循的例子。有任何想法吗?

4

4 回答 4

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;
于 2012-09-13T09:36:16.860 回答
9

这就是List::Utilreduce的用途:

use List::Util 'reduce';

my %hash = (foo => 3, bar => 7, baz => 2);

say reduce { our $a * our $b } values %hash;

输出:

42

于 2012-09-13T11:17:19.560 回答
4

我会这样迭代keys %hash

my $prod = 1;
$prod *= $hash{$_} for keys %hash;
于 2012-09-13T09:37:37.873 回答
2

这不行吗?

my $m = 1;
for (values %my_hash) {
    $m *= $_;
}
于 2012-09-13T09:36:33.163 回答