Comment puis-je voir si Perl de hachage a déjà une clé?
J'ai un script Perl qui est le comptage du nombre d'occurrences des différentes chaînes de caractères dans un fichier texte. Je veux être en mesure de vérifier si une chaîne de caractère n'est pas encore une clé dans la table de hachage. Est-il une meilleure façon de faire tout cela?
Ici est ce que je fais:
foreach $line (@lines){
if(($line =~ m|my regex|) )
{
$string = $1;
if ($string is not a key in %strings) # "strings" is an associative array
{
$strings{$string} = 1;
}
else
{
$n = ($strings{$string});
$strings{$string} = $n +1;
}
}
}
- La question est, pourquoi s'embêter avec ça? Si elle n'existe pas, alors $n sera le fnud. Le fnud la valeur numérique est de 0, et donc $n+1=1. Il n'y a pas besoin de vérifier si elle existe dans la table de hachage pour commencer.
Vous devez vous connecter pour publier un commentaire.
Je crois, à vérifier si une clé existe dans une table de hachage que vous venez de faire
Je conseille contre l'utilisation de
if ($hash{$key})
car il ne fera pas ce que vous attendez si la clé existe, mais sa valeur est nulle ou vide.Bien, l'ensemble de votre code peut être limitée à:
Si la valeur n'est pas là, ++ opérateur de l'assumer à 0 (et puis incrémenter de 1). Si elle est déjà là, il sera simplement incrémenté.
Je suppose que ce code devrait répondre à votre question:
De sortie:
L'itération peut être simplifiée:
(Voir
$_
dans perlvar.) Et vous pouvez même écrire quelque chose comme ceci:Qui de rapports à la clé la première fois qu'il est trouvé.
Vous pouvez simplement aller avec:
$a{$x}{$y}
permettra de créer$a{$x}
, peu importe si vous utilisezexists
ou de toute autre approche.