Come posso creare array multidimensionali in Perl?
-
11-07-2019 - |
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.
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.
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);