2016-04-12 12 views
0

Yuvalanmış bir dizinin bir kopyasını oluşturmaya çalışıyorum ve girişimlerimle bir başvuru yapmaya devam ettiğim anlaşılıyor.Bir dizi yapı içinde iç içe geçmiş dizinin bir kopyasını oluşturma

Daha spesifik olmak gerekirse, her alt dizinin bir önceki dizide oluşturduğu bir dizi diziye sahip olmaya çalışıyorum. Ben sorunları assuming

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

Ne kadar aittir:

#!/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"; 
} 

Benim çıkışı: İşte benim girişimi

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 

Ve/istiyorum olmasını bekliyoruz $ temp atayarak, durum böyle değilse lütfen bana bildirin. Herhangi bir yardım takdir edilir.

+0

http://stackoverflow.com/questions/388187/whats-the-best-way-to-make-a-deep-copy-of kadar yakın sürede tutulması -a-data-structure-in-perl –

+0

Genel olarak, Storable'nin 'dclone'unu kullanabilirsiniz. Bu durumda zdim'in çözümü daha uygundur (sadece basit bir sığ kopya istediğinizden). – ikegami

cevap

4

my ile yeni bir dizi oluşturun, üzerinde oluşturulacak dizinin içeriğini kopyalayın ve sonra buna ekleyin.

Kodunuzdaki

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

Ya da anonim bir dizi kullanmak istiyorsanız, 'push @aoa, [@ $ _, $ i ++];' – ikegami

+0

@ikegami Düzenleme ve yorum için çok teşekkür ederim, bu çok daha iyi. – zdim

İlgili konular