Frage

Ich bin ein bisschen neu zu Perl, aber hier ist es, was ich tun möchte:

my @array2d;
while(<FILE>){
  push(@array2d[$i], $_);
}

Es ist nicht zu kompilieren, da @array2d[$i] kein Array ist, sondern ein Skalarwert.

Wie soll ich erklären @ array2d als ein Array von Array?

Natürlich habe ich keine Ahnung davon, wie viele Zeilen die ich habe.

War es hilfreich?

Lösung

Um ein Array von Arrays zu machen, oder genauer gesagt eine Reihe von arrayrefs, versuchen, etwas wie folgt aus:

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}

Es drückt den Wert auf einen dereferenzierte ArrayRef für Sie. Sie sollten einen Eintrag wie diesen zugreifen können:

print $array[3][2];

Andere Tipps

Ändern Sie Ihre "Push" Linie folgt aus:

push(@{$array2d[$i]}, $_);

Sie machen im Grunde $ array2d [$ i] ein Array, indem sie durch die @ umliegende {} ... Sie sind dann in der Lage Elemente auf diese Anordnung von Arrayreferenzen zu drücken.

Hier finden Sie aktuelle perlref und perldsc zu sehen, wie verschachtelte Datenstrukturen zu machen, wie Arrays von Arrays und Hashes von Hashes. Sehr nützliche Dinge, wenn Sie tun, Perl.

Es gibt wirklich keinen Unterschied zwischen dem, was Sie geschrieben haben und diese:

@{$array2d[$i]} = <FILE>;

Ich kann nur annehmen, dass Sie durch die Dateien sind laufen.

Um zu vermeiden, Spur eines Zählers zu halten, könnten Sie dies tun:

...
push @array2d, [ <FILE> ];
...

, die sagt: 1) Erstellen einer Referenz auf ein leeres Array, 2) die Speicherung aller Zeilen in der Datei, 3) aufstecken @array2d.

Eine weitere einfache Möglichkeit ist es, eine Hash-Tabelle zu verwenden und den zwei Array-Indizes verwenden, um einen Hash-Schlüssel zu machen:

$two_dimensional_array{"$i $j"} = $val;

Wenn Sie nur eine Datei in einem Array zu speichern versuchen Sie dies auch tun können:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top