2010-11-12 57 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有助於瞭解原因。

相關問題