【问题标题】:Multiply all values in hash together in Perl?在Perl中将哈希中的所有值相乘?
【发布时间】:2012-09-06 08:45:36
【问题描述】:

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

我猜有一个简单而有效的函数可以做到这一点,可能使用each 或其他东西,但我找不到任何可以遵循的示例。有什么想法吗?

【问题讨论】:

    标签: perl hash key-value multiplication


    【解决方案1】:

    从 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 *= $_缩短了一点
    【解决方案2】:

    这就是 List::Utilreduce 的用途:

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

    输出:

    42

    【讨论】:

      【解决方案3】:

      我会像这样遍历keys %hash

      my $prod = 1;
      $prod *= $hash{$_} for keys %hash;
      

      【讨论】:

      • values 应该没问题,因为我不需要担心元素的顺序
      • 与其他答案相比,这更多地反映了我自己的编码风格,而不是表明我比其他人更聪明......
      【解决方案4】:

      这样不行吗?

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

      【讨论】:

      • 因为你不能给m赋值
      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 2015-12-05
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2010-10-20
      • 2019-01-04
      相关资源
      最近更新 更多