【问题标题】:Perl How to access a hash that is the element of an array that is the value of another hash?Perl如何访问作为另一个哈希值的数组元素的哈希?
【发布时间】: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 来获取它。本文提供了使用多种不同类型的混合数据结构的示例。

标签: arrays perl hash perl-data-structures


【解决方案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"; 
        }
    }
    

    这正在工作。非常感谢!

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 2013-06-06
      • 2019-07-30
      • 2021-08-01
      • 2015-06-26
      • 2013-08-21
      • 2013-03-22
      • 2015-12-03
      • 2010-12-20
      相关资源
      最近更新 更多