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

时间:2014-02-13 05:56:10

标签: 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"]["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++;}

1 个答案:

答案 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 functionforeach loop的文档。