Arrays 如何用2个数组创建二维数组

Arrays 如何用2个数组创建二维数组,arrays,perl,Arrays,Perl,如何用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

如何用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++;}

我不太清楚您想要创建什么样的数据结构。 但是,我假设您正在尝试创建数组的散列(散列表也称为字典或关联数组),而不是数组。 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;
在映射块内,
$\uu
变量依次设置为输入列表中的每个项目

要了解有关复杂数据结构的更多信息,请阅读(按以下顺序):


您还可以阅读和的文档。

我不太清楚您要创建什么样的数据结构。 但是,我假设您正在尝试创建数组的散列(散列表也称为字典或关联数组),而不是数组。 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;
在映射块内,
$\uu
变量依次设置为输入列表中的每个项目

要了解有关复杂数据结构的更多信息,请阅读(按以下顺序):

您还可以阅读和的文档