如何将一个数组推入另一个数组?

1 perl multidimensional-array

我们如何正确地将数组推入数组,然后检索每个外部数组(解释两者要求的每个清楚地分开)?

插图

my @f; my @e;
for $i (0..40) {
    @e=($i+=2, $i+1);
    push(@f,@e); # just it right ? 
}
    
# how go on get it under multi array control
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 5

Data::Dumper是探索这里发生的事情的好工具。它可以轻松可视化您的数据结构。

如果我们运行您的代码,然后@f使用 Data::Dumper 显示,我们会​​得到:

$VAR1 = [
          2,
          3,
          3,
          4,
          4,
          5,
          5,
          6,
          6,
[ ... snip ... ]
          40,
          40,
          41,
          41,
          42,
          42,
          43
        ];
Run Code Online (Sandbox Code Playgroud)

所以这不是做你想做的事。如果将一个数组压入另一个数组,Perl 只会将第二个数组中的每个元素添加到第一个数组的末尾。无法判断哪个元素属于哪个数组。这称为“阵列扁平化”。

发生这种情况是因为数组中的元素只能保存单个标量值。另一个数组不是标量值。但我们可以引用一个数组,然后它就是一个标量值。您可以使用 获得对数组的引用\

对代码的更改很简单:

my @e=($i+=2, $i+1); # declare @e inside the loop
push(@f,\@e); # Take a reference
Run Code Online (Sandbox Code Playgroud)

我们现在得到的输出是:

$VAR1 = [
          [
            2,
            3
          ],
          [
            3,
            4
          ],
          [
            4,
            5
          ],
[ ... snip ... ]
          [
            39,
            40
          ],
          [
            40,
            41
          ],
          [
            41,
            42
          ],
          [
            42,
            43
          ]
        ];
Run Code Online (Sandbox Code Playgroud)

您可以清楚地看到主阵列内的各个“子阵列”。

perllol手册页中有更多关于此内容的信息,您可以在perlreftutperlref中找到有关参考的更多信息。