繁体   English   中英

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

[英]How to push an array into another 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

你的意思是这样的吗?

#! /usr/bin/env perl

use warnings;
use strict;
use utf8;
use feature qw<say>;
use Data::Dumper;

my @f = ();

for my $i (0..4) {
    my @e = ($i+=2, $i+1);
    push(@f,\@e);
}

say Dumper(\@f);

exit(0);

Data::Dumper是探索这里发生的事情的好工具。 它使可视化数据结构变得容易。

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

$VAR1 = [
          2,
          3,
          3,
          4,
          4,
          5,
          5,
          6,
          6,
[ ... snip ... ]
          40,
          40,
          41,
          41,
          42,
          42,
          43
        ];

所以这不是你想要的。 如果将一个数组推入另一个数组,则 Perl 只需将第二个数组中的每个元素添加到第一个数组的末尾。 无法分辨哪个元素属于哪个数组。 这被称为“阵列展平”。

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

对代码的更改很简单:

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

而我们现在得到的output是:

$VAR1 = [
          [
            2,
            3
          ],
          [
            3,
            4
          ],
          [
            4,
            5
          ],
[ ... snip ... ]
          [
            39,
            40
          ],
          [
            40,
            41
          ],
          [
            41,
            42
          ],
          [
            42,
            43
          ]
        ];

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM