所以,我有一个哈希数组,@doc_vector。我想遍历每个哈希并修改键的值。
我正在使用的原始代码如下:
my %hash=undef;
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
$hash{ $key } = log($dnum/$dfreq_hash{$key});
}
}
但是,当我实际引用 @doc_vector 中的哈希值时,这些值从未被修改过。我可以通过执行以下操作来修改特定值(我保存了最后一个哈希条目的索引和我知道其值的键,分别为 $last_doc 和 $word):
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
if ($key eq $word)
{
$doc_vector[$last_doc]{$word}=log($dnum/$dfreq_hash{$key});
}
}
}
效果很好,但是当我尝试对所有条目执行此操作时:
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
$doc_vector[$hash]{$key}=log($dnum/$dfreq_hash{$key});
}
print "I'm going infinite\n";
}
我最终一遍又一遍地打印“我要无限”。我有一种感觉,问题是我正在输入一个哈希引用 $hash,而不是一个索引,但我不知道如何获取索引(以及我最初尝试这样做的方式(第一个代码段不起作用)。
任何帮助将非常感激。
提前致谢。