在循环中用两个变量填充多维数组

时间:2019-11-28 10:26:36

标签: perl for-loop multidimensional-array while-loop

我是PERL的新手,我尝试在循环中获得以下结果:

# ResultFistStep.
$VAR1 = [
          [
            'Hello1'
          ],
          [
            'Hello2'
          ],
          [
            'Hello3'
          ],
        ];

但是,如果我使用InnerArray \@InnerArray的引用:

# Example1
my @OuterArray;
my @InnerArray;

foreach(1,2,3)
{
    @InnerArray[0] = "Hello" . $_;
    push(@OuterArray, \@InnerArray);
}
print Dumper \@OuterArray;

...我得到这个结果:

$VAR1 = [
          [
            'Hello3'
          ],
          $VAR1->[0],
          $VAR1->[0]
        ];

如果我没有参考就尝试:

# Example2
my @OuterArray;
my @InnerArray;

foreach(1,2,3)
{
    @InnerArray[0] = "Hello" . $_;
    push(@OuterArray, @InnerArray);
}
print Dumper \@OuterArray;

..我得到以下结果:

$VAR1 = [
          'Hello1',
          'Hello2',
          'Hello3'
        ];

但是我想要的是在开始处显示结果( ResultFistStep ),在结束时显示以下结果( ResultFinally ):

# ResultFinally
$VAR1 = [
          [
            'Hello1', 
            [
               [], 
               []
            ]
          ],
          [
            'Hello2', 
            [
               [], 
               []
            ]
          ],
          [
            'Hello3', 
            [
               [], 
               []
            ]
          ],
        ];

所以问题是:

  1. 如何在完成 ResultFirstStep 后获得此结果?
  2. 我可以使用Perl从 ResultFinally 解决问题吗?

可以请人帮我吗?我没看错。

1 个答案:

答案 0 :(得分:0)

只需使用匿名数组:

my @outer;
push @outer, [ "Hello$_", [ [], [] ] ] for 1 .. 3;

甚至

my @outer = map [ "Hello$_", [ [], [] ] ], 1 .. 3;

如果要使用内部数组,请在循环内声明它,否则将一次又一次地重复使用同一数组:

my @outer;
for (1 .. 3) {
    my @inner = ( "Hello$_", [ [], [] ] );
    push @outer, \@inner;
}