如何使用2个数组创建多维数组?
@param=("param1","param2","param3");
@value=("value1_1, value1_2, value1_3", "value2_1, value2_2, value2_3","value3_1, value3_2, value3_3");
Output:
@out=(["param1"]["value1_1", "value1_2", "value1_3"], ["param2"]["value2_1", "value2_2", "value2_3"], ["param3"]["value3_1", "value3_2", "value3_3"])
我试过这种方式:
$j=0;
foreach $i(@param1){
push @{$out[$i]}, split(", ", $value[$j]);
$j++;}
答案 0 :(得分:4)
我不清楚您要创建哪种数据结构。 但是,我假设您正在尝试创建数组的哈希(哈希表也称为字典或关联数组),而不是阵列。 Perl的不同之处在于数组总是使用整数作为键,而散列总是使用字符串。
结果数据结构看起来像
%out = (
'param1' => ['value1_1', 'value1_2', 'value1_3'],
'param2' => ['value2_1', 'value2_2', 'value2_3'],
'param3' => ['value3_1', 'value3_2', 'value3_3'],
);
我们可以像这样创建这样的数据结构:
my %out;
for my $i (0 .. $#param) {
$out{$param[$i]} = [split /,\s*/, $value[$i]];
}
请注意$#foo
是@foo
数组中的最高索引。因此,0 .. $#foo
将是@foo
中所有索引的范围。另请注意,散列中的条目使用大括号下标$hash{$key}
进行访问,与使用方括号$array[$index]
的数组不同。
您可以使用切片同时访问哈希或数组中的多个元素 - @foo{'a', 'b', 'c'}
相当于($foo{a}, $foo{b}, $foo{c})
。我们还可以使用map {BLOCK} LIST
函数转换元素列表。总之,这允许以下解决方案:
my %out;
@out{@param} = map { [split /,\s*/, $_] } @value;
在地图块内,$_
变量依次设置为输入列表中的每个项目。
要了解有关复杂数据结构的更多信息,请阅读(按此顺序):
您还可以阅读map
function和foreach
loop的文档。