perl - 如何在哈希初始化器中嵌套数组?
问题描述
在 Perl 中,是否可以将一个数组嵌套在哈希初始化器中作为一个语句?以及稍后如何寻址和访问哈希内的嵌套数组?我知道如何通过将其分解为单独的语句来做到这一点......如何仅使用哈希的一个初始化程序来做到这一点?例子:
伪代码:
%hash = {
Param1 => "value1",
Param2 => "value2",
ParamArray => @(
"Array1",
"Array2",
)
}
# Also, is how I would deref the nested array?
@Array1 = @{$hash{ParamArray}};
解决方案
哈希值只能是标量,不能是数组。诀窍是使用对数组的引用。
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];
推荐阅读
- r - 按年份分类变量的 R 到 Latex 汇总表
- html - 没有文本框的 HTML 输入标签
- python - 如何将解包运算符(“*”)与 C 风格的字符串格式一起使用?
- r - 对列名中具有相同字符串的列应用相同的操作?
- verilog - 每当我运行 vvp 命令时出现 Verilog 语法错误
- ubuntu - Apache 配置不同的主机应用程序使用相同的 IP 和相同的端口
- google-chrome-extension - 2021 年在 chrome 扩展中模板化有哪些不错的选择
- sql-server - 从 ODBC C API 获取套接字文件描述符
- nginx - 使用 pm2 和 nginx 将 Nuxt SSR 部署到域上的子目录
- mysql - MySQL插入失败