首页 > 解决方案 > 如何在哈希初始化器中嵌套数组?

问题描述

在 Perl 中,是否可以将一个数组嵌套在哈希初始化器中作为一个语句?以及稍后如何寻址和访问哈希内的嵌套数组?我知道如何通过将其分解为单独的语句来做到这一点......如何仅使用哈希的一个初始化程序来做到这一点?例子:

伪代码:

%hash = {
     Param1 => "value1",
     Param2 => "value2",
     ParamArray => @(
         "Array1",
         "Array2",
     )
}

# Also, is how I would deref the nested array?
@Array1 = @{$hash{ParamArray}};

标签: perl

解决方案


哈希值只能是标量,不能是数组。诀窍是使用对数组的引用。

my @array = ( "Array1", "Array2" );

my %hash = (
   Param1     => "value1",
   Param2     => "value2",
   ParamArray => \@array,
);

您可以使用创建匿名数组[]。它返回对数组的引用。因此,以下等价于上述内容:

my %hash = (
   Param1     => "value1",
   Param2     => "value2",
   ParamArray => [ "Array1", "Array2" ],
);

无论哪种情况,您都可以使用

say for @{ $hash{$ParamArray} };

我不会使用以下内容,因为它不必要地复制了数组:

my @array = @{$hash{ParamArray}};
say $array[0];

相反,我会使用对数组的引用。

my $array_ref = $hash{ParamArray};
say $array_ref->[0];

推荐阅读