【发布时间】:2012-09-06 08:45:36
【问题描述】:
我想将散列的所有值相乘,而不必调用特定元素。例如。我不想做$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'},因为我不知道哈希中的元素数量来做这件事。
我猜有一个简单而有效的函数可以做到这一点,可能使用each 或其他东西,但我找不到任何可以遵循的示例。有什么想法吗?
【问题讨论】:
标签: perl hash key-value multiplication
我想将散列的所有值相乘,而不必调用特定元素。例如。我不想做$hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'},因为我不知道哈希中的元素数量来做这件事。
我猜有一个简单而有效的函数可以做到这一点,可能使用each 或其他东西,但我找不到任何可以遵循的示例。有什么想法吗?
【问题讨论】:
标签: perl hash key-value multiplication
从 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;
【讨论】:
$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;
【讨论】:
values 应该没问题,因为我不需要担心元素的顺序
这样不行吗?
my $m = 1;
for (values %my_hash) {
$m *= $_;
}
【讨论】:
m赋值