Comment créer des tableaux multidimensionnels en Perl?
-
11-07-2019 - |
Question
Je suis un peu nouveau sur Perl, mais voici ce que je veux faire:
my @array2d;
while(<FILE>){
push(@array2d[$i], Je suis un peu nouveau sur Perl, mais voici ce que je veux faire:
<*>
Il ne compile pas car @ array2d [$ i]
n'est pas un tableau, mais une valeur scalaire.
Comment dois-je déclarer @ array2d en tant que tableau de tableau?
Bien sûr, je n'ai aucune idée du nombre de lignes que j'ai.
);
}
Il ne compile pas car @ array2d [$ i]
n'est pas un tableau, mais une valeur scalaire.
Comment dois-je déclarer @ array2d en tant que tableau de tableau?
Bien sûr, je n'ai aucune idée du nombre de lignes que j'ai.
La solution
Pour créer un tableau de tableaux, ou plus précisément un tableau de références de tableaux, essayez quelque chose comme ceci:
my @array = ();
foreach my $i ( 0 .. 10 ) {
foreach my $j ( 0 .. 10 ) {
push @{ $array[$i] }, $j;
}
}
Il pousse la valeur sur un tableau référencé déréférencé pour vous. Vous devriez pouvoir accéder à une entrée comme celle-ci:
print $array[3][2];
Autres conseils
Modifiez votre & push; push " ligne à ceci:
push(@{$array2d[$i]}, Modifiez votre & push; push " ligne à ceci:
<*>
En gros, vous faites de $ array2d [$ i] un tableau en l’entourant de @ {} ... Vous pouvez alors insérer des éléments dans ce tableau de références de tableaux.
);
En gros, vous faites de $ array2d [$ i] un tableau en l’entourant de @ {} ... Vous pouvez alors insérer des éléments dans ce tableau de références de tableaux.
Il n'y a vraiment aucune différence entre ce que vous avez écrit et ceci:
@{$array2d[$i]} = <FILE>;
Je ne peux que supposer que vous parcourez des fichiers.
Pour éviter de garder la trace d'un compteur, vous pouvez procéder comme suit:
...
push @array2d, [ <FILE> ];
...
Cela signifie 1) créer une référence à un tableau vide, 2) stocker toutes les lignes dans le fichier, 3) l'insérer dans @ array2d
.
Un autre moyen simple consiste à utiliser une table de hachage et à utiliser les deux index de tableau pour créer une clé de hachage:
$two_dimensional_array{"$i $j"} = $val;
Si vous essayez simplement de stocker un fichier dans un tableau, vous pouvez également le faire:
fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);