将哈希值相加(Perl)

Posted

技术标签:

【中文标题】将哈希值相加(Perl)【英文标题】:Adding up the values in a hash (Perl) 【发布时间】:2012-11-21 10:51:57 【问题描述】:

我想将我创建的哈希中的值相加。

my $value_count;
foreach my $key (@keys) 
    $value_count = sum($wordskey, $value_count);

但是当我运行它时,我得到了

Undefined subroutine &main::sum called at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.

我不确定我在哪里出错了。我是 Perl 的新手。

编辑:我尝试只使用 + 运算符,但出现错误

Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.

几乎我的哈希就像 核心价值 猫 2 狗 4 大鼠 1

所以我尝试将所有值相加,以便取平均值。

编辑 2: 实际的修复是在我需要使我的 $value_count = 0 的 cmets 中。这修复了所有问题。谢谢你们。我认为这是一个需要解决的重要问题,我认为它可能对其他人有用,所以我将离开它。

【问题讨论】:

你用key而不是$key修正了错字吗? 确保您使用的是“$”信号。你不在你的例子中。 @Tim N aww darn 我确实有一个错字..... @KirsKringle 那是因为它是未定义的;用my $value_count = 0 初始化它。顺便说一句,你很高兴use warnings :) 以防万一您想知道:$value_count=0,虽然是一个问题,但并不是真正的问题。它只会导致发出警告。错字和sum 是实际问题。 【参考方案1】:

要使用sum 功能,您需要List::Util 包。但在这种情况下不需要这样做,因为您可以使用 + 运算符:

$value_count = $value_count + $words$key;
# or $value_count += $words$key;

事实上,您可以使用sum 并避免循环。这是您应该使用的解决方案:

use List::Util 'sum';
my $value_count = sum values %words;

values 函数将哈希值作为列表返回,sum 对该列表求和。如果您不想对所有键求和,请使用哈希切片:

use List::Util 'sum';
my $value_count = sum @words@keys;

【讨论】:

我认为使用values 可能比散列切片更直接:perl -MList::Util=sum -le '%h = ( one =&gt; 1, ten =&gt; 10, six =&gt; 6 ); print sum( values %h )' @Ashley 是的,但这仅在您想对所有值求和时才有效。 不清楚 OP 是想对所有值求和还是只是对一个子集求和。最好的解决方案可能是sum values 或哈希切片,这取决于它。【参考方案2】:

如果你替换应该没问题:

$value_count = sum($wordskey, $value_count);

与:

$value_count += $wordskey;

【讨论】:

以上是关于将哈希值相加(Perl)的主要内容,如果未能解决你的问题,请参考以下文章

如何在perl中删除哈希值中的重复值?

将 perl 正则表达式中的键和值传递给哈希

如何使用 perl CGI 打印哈希值

如何在 Perl 哈希表中存储多个值?

Perl如何访问作为另一个哈希值的数组元素的哈希?

Perl 哈希值的基本原理