我有Dumper
'group' => {
'1104' => {
'a' => 1
},
'52202' => {
'b' => 1,
'c' => 1
},
'52201' => {
'c' => 1
},
'52200' => {
'c' => 1
}
},
我假设是哈希数组哈希数组?
我想宣布这个结构是我自己的。
有没有办法做到这一点,所以下次我看到这么复杂的结构时,我可以立刻做到这一点? =)
答案 0 :(得分:11)
您的输出是哈希散列的哈希值,第一个哈希值只包含一个元素。 {}
标记了哈希引用,因此您将重复数据结构,结果$hohoh
是对HoHoH的引用。
my $hohoh = {
'group' => {
'1104' => {
'a' => 1
},
'52202' => {
'b' => 1,
'c' => 1
},
'52201' => {
'c' => 1
},
'52200' => {
'c' => 1
}
},
};
print $hohoh->{group}{1104}{a}; # -> 1
我建议您阅读Perl Datastructures Cookbook。
答案 1 :(得分:2)
由于变量和散列值的类型可以在Perl中更改,因此没有任何方法可以按照您可能想到的方式“声明”三级散列。您可以在创建每个密钥时将空hashref实例化,这是一个类似的想法:
# First pass
my $data = {};
# Later...
$data->{group} = {};
# Still later...
$data->{group}->{1104} = {};
# Finally...
$data->{group}->{1104}->{a} = 1;
但是,您可以轻松地在获取数据时简单地填写数据,从而允许自动进行操作:
my $data;
# Fill one piece of data... Perl creates all three hash levels now.
$data->{group}->{1104}->{a} = 1;
# Fill another piece of data, this one has two values in the "bottom" hash.
$data->{group}->{52202} = { b => 1, c => 2};
但是没有办法(在普通的Perl中)“强制”任何特定键的值包含哈希而不是字符串或子例程引用,这通常是具有类C类型系统的语言中声明的意图。