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如何访问作为另一个哈希值的数组元素的哈希?的主要内容,如果未能解决你的问题,请参考以下文章