代码之家  ›  专栏  ›  技术社区  ›  dgBP

用Perl将散列中的所有值相乘?

  •  0
  • dgBP  · 技术社区  · 13 年前

    我想将散列的所有值相乘,而不必调用特定的元素。例如I 不要 想做什么 $hash{'kv1'} * $hash{'kv2'} * $hash{'kv3'} 因为我不知道哈希中的元素数量。

    我猜有一个简单有效的函数可以做到这一点,也许可以使用 each 或者其他什么,但我找不到任何可以效仿的例子。有什么想法吗?

    4 回复  |  直到 13 年前
        1
  •  9
  •   Quentin    13 年前

    从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;
    
        2
  •  9
  •   darch    13 年前

    这就是 List::Util 减少 用于:

    use List::Util 'reduce';
    
    my %hash = (foo => 3, bar => 7, baz => 2);
    
    say reduce { our $a * our $b } values %hash;
    

    输出:

    42

        3
  •  4
  •   pmakholm    13 年前

    我会反复 keys %hash 像这样:

    my $prod = 1;
    $prod *= $hash{$_} for keys %hash;
    
        4
  •  2
  •   TLP    13 年前

    这样不行吗?

    my $m = 1;
    for (values %my_hash) {
        $m *= $_;
    }