2017-10-14 4 views
-4

Si j'ai un hachage Perl et que j'ai généré une valeur numérique de façon aléatoire, comment puis-je obtenir mon code pour vérifier si la valeur générée aléatoirement existe déjà dans le hachage?Vérifiez si la valeur générée aléatoirement existe déjà dans le hachage

+2

(Google est votre ami ici. Ceci est un parfait exemple de quelque chose que vous pourriez facilement avoir recherché pour vous-même.) – Mort

+1

@Mort J'allais dire que, mais pour quelqu'un de nouveau ce n'est pas si facile à trouver. Bien sûr, 'values' et' exists' peuvent être assez faciles, mais le tour inverse n'est pas si simple. – simbabque

Répondre

1

Utilisez le exists built-in.

Pour vérifier les clés:

my %foo = (bar => 1); 
if (exists $foo{foo}) { 
    print "key foo exists"; 
} 
if (exists $foo{bar}) { 
    print "key bar exists"; 
} 

Ce code imprimera

key bar exists 

Pour vérifier les valeurs, vous devez d'abord reverse le hachage. Rappelez-vous que les hachages sont des listes, donc si elles sont inversées, toutes les clés deviennent des valeurs. Vous pouvez avoir des données si une valeur existe déjà plus d'une fois, mais si tout ce que vous voulez savoir est de savoir si une valeur existe, ce n'est pas pertinent.

my %foo = (bar => 1, baz => 2, qrr => 1); 
my %reversed = reverse %foo; 
if (exists $reversed{1}) { 
    print "value 1 exists"; 
} 
if (exists $reversed{3}) { 
    print "value 3 exists"; 
} 

Cela imprime

value 1 exists 
+2

* "Vous * *** pouvez *** * perdre des données" *! Et si '% reverse 'n'est utilisé qu'une seule fois, il est probablement plus rapide d'utiliser' List :: Util :: any {$ _ == 3} valeurs% foo' – Borodin