如何从嵌套数组中提取内部数组?

时间:2016-07-26 03:41:09

标签: arrays perl for-loop multidimensional-array

我有以下代码定义嵌套数组,然后循环遍历数组并输出它。我想使用注释掉的行来提取内部数组,但它不起作用,因为它会使内部数组变平。我不得不使用随后的三行。如何让注释掉的线路正常工作?

use Data::Dumper;    
my @arr1;
for $i (0..9)
{
    my @arr2;
    my @arr3;
    for $j ('A'..'D') {
        push @arr2, $j;
        push @arr3, int(rand(100));
    }
    push @arr1, [$i, \@arr2, \@arr3]; 
}
for $linkarray (@arr1) {
    #my ($i, @arr2, @arr3) = @$linkarray;   
    my $i = @$linkarray[0];
    my @arr2 = @$linkarray[1];
    my @arr3 = @$linkarray[2];
    print "i: $i\narr2: " . Dumper(@arr2) . "\narr3: " . Dumper(@arr3) . "\n";
}

1 个答案:

答案 0 :(得分:1)

如果遇到问题,想一想如何使用命名数组,然后用返回引用的块替换名称。

如果命名数组为$a[0],则引用数组为${REF}[0]

如果命名数组为@a,则引用数组为@{REF}

容易!

my $i    =    ${ $linkarray }[0];
my @arr2 = @{ ${ $linkarray }[1] };
my @arr3 = @{ ${ $linkarray }[2] };

但是,以下内容更容易阅读:

my $i    =    $linkarray->[0];
my @arr2 = @{ $linkarray->[1] };
my @arr3 = @{ $linkarray->[2] };

此外,你真的不应该像那样复制那些数组。这很浪费。只需使用参考文献。

my $i    = $linkarray->[0];
my $arr2 = $linkarray->[1];
my $arr3 = $linkarray->[2];

最后,这简化为以下内容:

my ($i, $arr2, $arr3) = @$linkarray;

参考文献: