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 に答える