2016-04-12 9 views
0

Ich versuche, eine Kopie eines verschachtelten Array zu erstellen, und es scheint, dass ich weiterhin einen Verweis mit meinen Versuchen machen.So erstellen Sie eine Kopie eines verschachtelten Array in einem Array Array-Struktur

Um genauer zu sein Ich versuche, ein Array von Arrays zu haben, wobei jedes Sub-Array auf dem vorherigen Array aufbaut. Hier ist mein Versuch:

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

Meine Ausgabe ist:

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 

Und ich will/erwarten, dass es sein:

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

ich meine Probleme gehe davon liegt bei, wie ich bin Zuweisen von $ temp, lassen Sie mich bitte wissen, wenn dies nicht der Fall ist. Jede Hilfe wird geschätzt.

+0

http://stackoverflow.com/questions/388187/whats-the-best-way-to-make-a-deep-copy-of -a-data-structure-in-perl –

+0

Im Allgemeinen können Sie Storles "dclone" verwenden. Die Lösung von zdim ist in diesem Fall besser geeignet (da Sie nur eine einfache seichte Kopie wünschen). – ikegami

Antwort

4

Erstellen Sie ein neues Array mit my, kopieren Sie den Inhalt des zu erstellenden Arrays, und fügen Sie ihn hinzu.

halten sie so nah wie möglich an Ihrem Code

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

Oder wenn Sie ein anonymes Array verwenden möchten, drücken Sie @ aoa, [@ $ _, $ i ++]; ' – ikegami

+0

@ikegami Vielen Dank für die Bearbeitung und kommentieren, das ist viel besser. – zdim

Verwandte Themen