我想将哈希的所有值相乘,而不必调用特定元素。例如,我不想这样做,因为我不知道哈希中的元素数量来执行此操作。$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'}
我猜有一个简单而有效的功能可以做到这一点,也许是使用each
或其他东西,但我找不到任何可以遵循的例子。有任何想法吗?
我想将哈希的所有值相乘,而不必调用特定元素。例如,我不想这样做,因为我不知道哈希中的元素数量来执行此操作。$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'}
我猜有一个简单而有效的功能可以做到这一点,也许是使用each
或其他东西,但我找不到任何可以遵循的例子。有任何想法吗?
从 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;
这就是List::Util的reduce的用途:
use List::Util 'reduce';
my %hash = (foo => 3, bar => 7, baz => 2);
say reduce { our $a * our $b } values %hash;
输出:
42
我会这样迭代keys %hash
:
my $prod = 1;
$prod *= $hash{$_} for keys %hash;
这不行吗?
my $m = 1;
for (values %my_hash) {
$m *= $_;
}