Domanda

Sono un po 'nuovo in Perl, ma ecco cosa voglio fare:

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

Sono un po 'nuovo in Perl, ma ecco cosa voglio fare:

<*>

Non viene compilato poiché @ array2d [$ i] non è un array ma un valore scalare.

Come devo dichiarare @ array2d come un array di array?

Certo, non ho idea di quante righe ho.

); }

Non viene compilato poiché @ array2d [$ i] non è un array ma un valore scalare.

Come devo dichiarare @ array2d come un array di array?

Certo, non ho idea di quante righe ho.

È stato utile?

Soluzione

Per creare una matrice di array o, più precisamente, una matrice di array array, provare qualcosa del genere:

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

Spinge il valore su un arrayref referenziato per te. Dovresti essere in grado di accedere a una voce come questa:

print $array[3][2];

Altri suggerimenti

Modifica il tuo " push " linea a questo:

push(@{$array2d[$i]}, 

Modifica il tuo " push " linea a questo:

<*>

In pratica stai creando $ array2d [$ i] un array circondandolo con il @ {} ... Puoi quindi spingere gli elementi su questo array di riferimenti di array.

);

In pratica stai creando $ array2d [$ i] un array circondandolo con il @ {} ... Puoi quindi spingere gli elementi su questo array di riferimenti di array.

Dai un'occhiata a perlref e perldsc per vedere come creare strutture di dati nidificate, come matrici di matrici e hash di hash. Cose molto utili quando stai facendo Perl.

Non c'è davvero alcuna differenza tra ciò che hai scritto e questo:

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

Posso solo supporre che stai ripetendo i file.

Per evitare di tenere traccia di un contatore, puoi farlo:

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

Detto 1) creare un riferimento a un array vuoto, 2) memorizzare tutte le righe in FILE, 3) spingerlo su @ array2d .

Un altro modo semplice è usare una tabella hash e usare i due indici di array per creare una chiave hash:

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

Se stai solo cercando di archiviare un file in un array puoi anche farlo:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top