在散列中添加值(Perl)
我想把我创建的散列中的值相加在散列中添加值(Perl),perl,hashtable,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 1
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.
C:/Users/Clayton/workspace/main/main.pl第54行,第174行调用了未定义的子例程&main::sum。
我真的不确定我在这里哪里出了问题。我是Perl新手
编辑:我尝试使用just+运算符,但出现了错误
Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.
在C:/Users/Clayton/workspace/main/main.pl第54行,第174行使用未初始化的值。
我的杂烩很像
关键值
第2类
狗4
鼠1
所以我试图把所有的值加起来,这样我就可以得到一个平均值
编辑2:实际修复是在我需要的注释中,以使我的$value\u count=0。一切都解决了。谢谢大家。我认为这是一个需要解决的重要问题,我认为它可能对其他人有用,所以我将离开它 要使用
sum
函数,您需要软件包。但是在这种情况下不需要这样做,因为您可以使用+
操作符:
$value_count = $value_count + $words{$key};
# or $value_count += $words{$key};
事实上,您可以使用sum
并避免循环。这是您应该使用的解决方案:
use List::Util 'sum';
my $value_count = sum values %words;
values
函数将哈希值作为列表返回,并对该列表求和。如果不想对所有键求和,请使用哈希切片:
use List::Util 'sum';
my $value_count = sum @words{@keys};
如果您更换了以下部件,您应该不会有问题:
$value_count = sum($words{key}, $value_count);
与:
您是否用
键
而不是$key
修复了打字错误?请确保您使用的是“$”符号。你不在你的例子中。@Tim N啊,该死的,我确实有一个打字错误…@KirsKringle,那是因为它没有定义;用my$value\u count=0对其进行初始化。顺便说一句,如果您想知道:$value\u count=0
,那么使用警告(警告)就太好了,因为问题并不是真正的问题。这只会导致发出警告。打字错误和sum
是实际问题。我认为使用value
可能比哈希片更简单:perl-MList::Util=sum-le'%h=(一=>1,十=>10,六=>6);打印求和(值%h)
@Ashley是,但这仅在您要求和所有值时有效。不清楚OP是要求和所有值还是仅求和一个子集。最佳解决方案可能是求和值
或哈希切片,具体取决于此。
$value_count += $words{key};