perl - 将散列中的值相加 (Perl)

标签 perl hashtable

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

my $value_count;
foreach my $key (@keys) {
    $value_count = sum($words{key}, $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.

我的哈希值差不多是这样的 核心值(value) 猫 2 狗 4 老鼠1

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

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

最佳答案

要使用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};

关于perl - 将散列中的值相加 (Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692296/

相关文章:

mysql - 编写perl脚本以使用mysqldump进行mysql增量备份

perl - 相同的哈希键,不同的值 : how can I compare them?

python - 使用 sed、awk、perl 等删除 N 个匹配模式

windows - 如何使用 Perl 在 Windows 上检测打开的文件句柄的文件是否已被删除?

java - Java Hashtable 的 count 字段何时初始化?

haskell - 修改 ST Monad 中的哈希表

shell - SED 或 AWK 全部替换为另一个文件中的模式

algorithm - 如何在哈希表中均匀分布不同的键?

c++ - 将 typedef 映射插入哈希表

c# - 固定缓存的哈希表大小