2010-11-12 37 views
2

我想创建一个哈希值,它的值是一个数组。Perl如何访问作为另一个散列值的数组元素的散列?

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

我已经把这个哈希的key和value值如下:

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

这里,

我的主哈希 - > senseInformationHash

我的价值 - >是一个数组

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

和我把关键和价值如下:

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

我不知道这是否是一个正确的方法来做到这一点。由于我卡住了,不知道我如何能打印出这个复杂的东西。我想打印出来,以检查我是否正确地做。

任何帮助将非常感激。提前致谢!

+3

相关的FM to R是Perl Data Structures Cookbook。您可以通过在终端中运行perldoc perldsc来获取它,或者在浏览器中访问http://perldoc.perl.org/perldsc.html。本文有许多不同类型的混合数据结构的例子。 – daotoad 2010-11-12 01:26:04

回答

4

只要写

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

,并用它做。你知道Perl会嫉妒CamelCase,所以你应该使用适当的下划线。否则,它可以吐,降压,一般行为不端。

+0

你可以告诉我如何通过这种方式存储后访问它? – Radz 2010-11-12 01:07:05

+0

@Radz:%s的'printf'值是%d \ n“,$ word,$ sense_information_hash {$ sense} [1] {$ word};' – tchrist 2010-11-12 01:10:14

+0

@Radz:那*就是*访问它的方式。你正在给它一条通往数据的路径,并说“无论在哪里,增加计数”。 – Axeman 2010-11-12 01:15:23

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"; 
    } 
} 

这是现在的工作。非常感谢!

+0

使用'each'使事情变得更加曲折:https://gist.github.com/673683 – hobbs 2010-11-12 03:21:40

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有助于了解原因。

相关问题