Je voudrais traiter tous les éléments d'une table de hachage en Perl. Comment puis je faire ça?En Perl, comment traiter un hachage entier?
Ceci est une question du official perlfaq. Nous sommes importing the perlfaq to Stack Overflow.
Je voudrais traiter tous les éléments d'une table de hachage en Perl. Comment puis je faire ça?En Perl, comment traiter un hachage entier?
Ceci est une question du official perlfaq. Nous sommes importing the perlfaq to Stack Overflow.
(Ceci est le official perlfaq answer, moins les modifications ultérieures)
Il y a deux façons que vous pouvez traiter un hachage entier. Vous pouvez obtenir une liste de keys, puis parcourir chaque clé ou saisir une paire de valeurs-clés à la fois.
Pour parcourir toutes les clés, utilisez le keys function. Cela extrait toutes les clés du hachage et vous les renvoie sous forme de liste. Vous pouvez alors obtenir la valeur grâce à la clé particulière que vous traitiez:
foreach my $key (keys %hash) {
my $value = $hash{$key}
...
}
Une fois que vous avez la liste des clés, vous pouvez traiter cette liste avant de traiter les éléments de hachage. Par exemple, vous pouvez trier les clés afin que vous puissiez les traiter dans l'ordre lexical:
foreach my $key (sort keys %hash) {
my $value = $hash{$key}
...
}
Ou, vous pouvez traiter seulement quelques-uns des éléments. Si vous voulez seulement gérer les clés qui commencent par le texte :, vous pouvez sélectionner uniquement ceux utilisant grep:
foreach my $key (grep /^text:/, keys %hash) {
my $value = $hash{$key}
...
}
Si le hachage est très grand, vous voudrez peut-être de ne pas créer une longue liste de clés. Pour enregistrer une mémoire, vous pouvez saisir une paire clé-valeur à un moment à l'aide each(), qui retourne une paire que vous ne l'avez pas encore vu:
while(my($key, $value) = each(%hash)) {
...
}
Le chaque opérateur renvoie les paires dans l'ordre apparemment aléatoire, donc si En vous ordonnant, vous devrez vous en tenir à la méthode des clés.
L'opérateur each() peut être un peu difficile cependant. Vous ne pouvez pas ajouter ou supprimer des clés du hachage lorsque vous l'utilisez sans avoir à ignorer ou à re-traiter certaines paires après que Perl a modifié tous les éléments en interne. De plus, un hachage a un seul itérateur, donc si vous utilisez keys, values, ou each sur le même hachage, vous pouvez réinitialiser l'itérateur et gâcher votre traitement. Voir le each entry en perlfunc pour plus de détails.