Arrays 如何申报AoHoAoH?

Arrays 如何申报AoHoAoH?,arrays,perl,hash,perl-data-structures,Arrays,Perl,Hash,Perl Data Structures,我从Dumper 'group' => { '1104' => { 'a' => 1 }, '52202' => { 'b' => 1, 'c' => 1 },

我从
Dumper

'group' => {
             '1104' => {
                         'a' => 1
                       },
             '52202' => {
                          'b' => 1,
                          'c' => 1
                        },
             '52201' => {
                          'c' => 1
                        },
             '52200' => {
                          'c' => 1
                        }
           },
我假设它是一个散列数组还是一个散列数组

我想声明这个结构是我自己的


有什么方法可以做到这一点,所以下次我看到如此复杂的结构时,我可以很快做到吗?=)

您的输出是一个散列的散列,第一个散列只包含一个元素。
{}
标记了一个散列引用,因此您可以重复您的数据结构,其中生成的
$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中可能会改变,所以没有任何方法可以按照您可能的想法“声明”三级散列。您可以在创建每个键时将空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类型系统的语言声明的目的。

您所说的“声明该结构”是什么意思?仅仅评估转储程序输出以读取结构是不可能的吗?顺便说一句,该数据结构中没有数组,都是嵌套哈希。OP提到了数组。该结构是值的散列的散列;没有第三个“哈希”层。@Zaid:第一个哈希键:“组”,第二个哈希键:“1104”,第三个哈希键:“a”,第三个哈希值:1。让你困惑的可能是第一个散列“层”只有一个元素。。。我的眼睛和以前不一样了