Perl如何访问作为另一个哈希值的数组元素的哈希?

Posted

技术标签:

【中文标题】Perl如何访问作为另一个哈希值的数组元素的哈希?【英文标题】:Perl How to access a hash that is the element of an array that is the value of another hash? 【发布时间】:2010-11-12 01:01:08 【问题描述】:

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

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

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

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

这里,

我的主哈希 -> senseInformationHash

我的值 -> 是一个数组

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

我输入键和值如下:

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

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

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

【问题讨论】:

与 R 相关的 FM 是 Perl Data Structures Cookbook。您可以通过在终端中运行perldoc perldsc 或在浏览器中转到perldoc.perl.org/perldsc.html 来获取它。本文提供了使用多种不同类型的混合数据结构的示例。 【参考方案1】:

随便写

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

并完成它。

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

【讨论】:

你能告诉我这样存储后如何访问它吗? @Radz: printf "value of %s is %d\n", $word, $sense_information_hash$sense[1]$word; @Radz:那访问它的方式。你给它一个数据路径并说“不管有什么,增加计数”。【参考方案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 有助于了解原因。

【讨论】:

【参考方案3】:

感谢 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"; 
    

这正在工作。非常感谢!

【讨论】:

以上是关于Perl如何访问作为另一个哈希值的数组元素的哈希?的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中如何使用变量作为哈希键?

如何将数组作为值存储在 Perl 哈希中?

无法在 Perl 循环中访问哈希查找表

Perl 变量:哈希变量

“在将哈希分配给 perl 中的哈希时,“不能使用字符串 (””) 作为哈希引用,而“严格引用”在使用时出现错误

从 perl 数组/哈希打印信息