[英]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手册页中有更多关于此的内容,您可以在perlreftut和perlref中找到有关参考的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.