因此,我有一个散列数组@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和$字):这工作得很好
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";
}
我结束了印刷“我要无限”一遍又一遍。我有一个感觉,问题是我把一个哈希引用,$哈希,而不是索引,但我不知道如何获得索引(以及我最初试图做到这一点的方式(1st代码段没有提前工作)。
任何帮助,将不胜感激。
感谢。
为什么'%hash'?如果严格/警告需要它,这是一个进一步代码下面的问题的迹象...... – 2013-03-25 06:50:08
'my%hash = undef;'不会做你认为它的做法。它相当于'my%hash =(''=> undef);'。除了第一种形式会产生带有“使用警告”的警告。 – 2013-03-25 17:23:42