Test, si une clé de hachage existe et imprimer les valeurs de Hachage en perl
Si une clé existe dans un tableau, je veux imprimer cette clé, et ses valeurs de hachage. Voici le code que j'ai écrit.
for($i=0;$i<@array.length;$i++)
{
if (exists $hash{$array[$i]})
{
print OUTPUT $array[$i],"\n";
}
}
Du code ci-dessus, je suis en mesure d'imprimer des touches. Mais je ne suis pas sûr de savoir comment imprimer les valeurs de cette clé.
Quelqu'un peut m'aider?
Grâce
Vous devez vous connecter pour publier un commentaire.
@array.length
est syntaxiquement juridique, mais il est certainement pas ce que vous voulez.@array
, dans un contexte scalaire, vous donne le nombre d'éléments dans le tableau.La
length
fonction, sans argument, vous donne la longueur de$_
.La
.
opérateur effectue la concaténation de chaîne.Donc
@array.length
prend le nombre d'éléments dans@array
et la longueur de la chaîne contenue dans$_
, les traite comme des chaînes de caractères, et les réunit.$i < ...
impose un contexte numérique, il est donc susceptible d'être traitée comme un nombre -- mais sûrement pas celui que vous voulez. (Si@array
a 15 éléments et$_
de passe de 7 caractères, le nombre devrait être157
, un sens de la valeur.)La bonne façon de calculer le nombre d'éléments dans
@array
est juste@array
dans un contexte scalaire, ou, pour le rendre plus explicite,scalar @array
.Pour répondre à votre question, si
$array[$i]
est un clé, le correspondant valeur est$hash{$array[$i]}
.Mais un style C
for
boucle n'est pas la façon la plus propre pour parcourir un tableau, surtout si vous avez seulement besoin de la valeur, pas l'indice, à chaque itération.use Array::Utils qw(:all); for(intersect(@array,keys %hash)){print;}
De méthodes alternatives à l'aide de hachage tranches:
(Pour ceux qui aiment le golf).