特定の要素を呼び出さずに、ハッシュのすべての値を乗算したいと考えています。たとえば、これを行うためのハッシュ内の要素の数がわからないため、やりたくありません。$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 *= $_;
}