2

我正在尝试创建一个以数组为值的哈希。

值的第一个元素(它是一个数组)是一个标量。值的第二个元素(它是一个数组)是另一个散列。

我已将值放入此哈希的键和值中,如下所示:

${${$senseInformationHash{$sense}[1]}{$word}}++;

这里,

我的主哈希 -> senseInformationHash

我的价值 -> 是一个数组

所以,${$senseInformationHash{$sense}[1]}给我参考我的哈希

我输入键和值如下:

${${$senseInformationHash{$sense}[1]}{$word}}++;

我不确定这是否是正确的方法。因为我被卡住了,不知道如何打印这个复杂的东西。我想把它打印出来,以检查我是否做得正确。

任何帮助将不胜感激。提前致谢!

4

3 回答 3

4

写吧

$sense_information_hash{$sense}[1]{$word}++;

并完成它。

Perl 嫉妒 CamelCase,你知道,所以你应该使用正确的下划线。否则,它可能会吐口水,并且通常行为不端。

于 2010-11-12T01:04:59.737 回答
2

哈希值永远不是数组,它是数组引用。

要查看您是否做得对,您可以转储整个结构:

my %senseInformationHash;
my $sense = 'abc';
my $word = '123';
${${$senseInformationHash{$sense}[1]}{$word}}++;
use Data::Dumper;
print Dumper( \%senseInformationHash );

这让你:

$VAR1 = {
      'abc' => [
                 undef,
                 {
                   '123' => \1
                 }
               ]
    };

请注意\1: 大概您希望该值为 1,而不是对标量 1 的引用。您得到后者是因为您${ ... }++;说将大括号中的内容视为标量引用并增加所引用的标量。

${$senseInformationHash{$sense}[1]}{$word}++;做你想做的事,就像$senseInformationHash{$sense}[1]{$word}++. 您可能会发现http://perlmonks.org/?node=References+quick+reference有助于了解原因。

于 2010-11-12T03:40:59.223 回答
0

感谢 Axeman 和 TChrist。

我必须访问它的代码如下:

    foreach my $outerKey (keys(%sense_information_hash))
{
  print "\nKey => $outerKey\n";
  print "  Count(sense) => $sense_information_hash{$outerKey}[0]\n";

        foreach(keys (%{$sense_information_hash{$outerKey}[1]}) )
    {
        print " Word wt sense => $_\n";
        print " Count  => $sense_information_hash{$outerKey}[1]{$_}\n"; 
    }
}

现在正在工作。非常感谢!

于 2010-11-12T01:19:08.177 回答