Perl: Bon moyen de tester si une valeur est dans un tableau?
Si j'ai un tableau:
@int_array = (7,101,80,22,42);
Comment puis-je vérifier si la valeur de l'entier 80 est dans la matrice sans boucle sur chaque élément?
source d'informationauteur coding4fun | 2010-12-31
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas sans la boucle. Cela fait partie de ce que signifie être un tableau. Vous pouvez utiliser une boucle implicite à l'aide de grep ou smartmatch, mais il y a toujours une boucle. Si vous voulez éviter la boucle, utiliser un hash au lieu (ou en plus).
Avant d'utiliser smartmatch, note:
http://search.cpan.org/dist/perl-5.18.0/pod/perldelta.pod#The_smartmatch_family_of_features_are_now_experimental:
CPAN solution: utiliser
Liste::MoreUtils
Si vous avez besoin de faire BEAUCOUP de NOMBREUSES recherches dans le même tableau, d'une façon plus efficace est de stocker le tableau dans une table de hachage une fois et de regarder dans la table de hachage:
Pourquoi utiliser cette solution sur les solutions de rechange?
Ne pouvez pas utiliser smart match en Perl avant 5.10. Selon ce DONC, après les de brian d foy]Deuxsmart match est le court-circuit, de sorte qu'il est aussi bon que "toute" solution pour 5.10.
grep
solution de boucles à travers les ensemble liste, même si le premier élément de 1 000 000 à la longue liste des matchs.any
court-circuit et de quitter le moment de la première correspondance est trouvée, il est donc plus efficace. Affiche originale explicitement dit "sans boucle à travers chaque élément"Si vous devez faire Beaucoup de recherches, le coût irrécupérable de hachage création rend le hachage de recherche de méthode BEAUCOUP plus efficace que tout autre. Voir cette SORTE de post pour plus de détails
Encore une autre façon de vérifier un certain nombre dans un tableau:
Voir
List::Util
.Si vous utilisez Perl 5.10 ou version ultérieure, vous pouvez utiliser le smart match opérateur
~~
: