2016-04-12 16 views
0

入れ子配列のコピーを作成しようとしていますが、私は自分の試みを参照し続けているようです。配列構造体の配列内に入れ子配列のコピーを作成する方法

より具体的には、各サブアレイが以前のアレイ上に構築されたアレイのアレイを作成しようとしています。私は私の問題を想定してい

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 

は、私がどのようにしてある:

#!/usr/bin/perl -w 
use strict; 
use warnings; 

my @aoa=[(1)]; 
my $i = 2; 
foreach (@aoa){ 
    my $temp = $_;#copy current array into $temp 
    push $temp, $i++; 
    push @aoa, $temp; 
    last if $_->[-1] == 5; 
} 
#print contents of @aoa 
foreach my $row (@aoa){ 
    foreach my $ele (@$row){ 
    print "$ele "; 
    } 
    print "\n"; 
} 

私の出力は次のとおりです:ここに私の試みです

1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 

そして私は/したいことがあることを期待$ tempを指定してください。そうでない場合は教えてください。どんな助けもありがとうございます。

+0

http://stackoverflow.com/questions/388187/whats-the-best-way-to-make-a-deep-copy-ofあなたのコードにできるだけ近いそれを維持-a-data-structure-in-perl –

+0

一般に、Storableの 'dclone'を使うことができます。この場合、zdimのソリューションがより適切です(単純な浅いコピーがほしいからです)。 – ikegami

答えて

4

は、それに追加し、上に構築されるように、配列の内容をコピーし、myで新しい配列を作成します。

foreach (@aoa) { 
    last if $_->[-1] == 5; 
    my @temp = @$_;   #copy current array into @temp 
    push @temp, $i++; 
    push @aoa, \@temp; 
} 
+0

匿名配列を使用する場合、 'push @aoa、[@ $ _、$ i ++];' – ikegami

+0

@ikegami編集とコメントをお願いします。 – zdim