271 votes

Comment puis-je vérifier si un tableau de Perl contient une valeur particulière ?

Je suis en train de trouver un moyen de vérifier l’existence d’une valeur dans un tableau sans itération dans le tableau.

Je lis un fichier pour un paramètre. J’ai une longue liste de paramètres, que je ne veux pas traiter. J’ai placé ces paramètres indésirables dans un tableau `` .

J’ai envie de lire un nouveau paramètre et si il n’existe pas dans , traitez-le. S’il n’existe pas dans , passez à la prochaine lecture.

250voto

Aaron T Harris Points 777
<pre><code></code><p>Semblable à if (« valeur » ~ ~ @array), mais semble plus explicite.</p></pre>

208voto

jkramer Points 7271

Il suffit de tourner le tableau dans un hachage :

Vous pouvez également ajouter plusieurs params (unique) à la liste :

Et plus tard récupérer une liste de paramètres (unique) :

140voto

Bitmap Points 4122

Pour la valeur littérale faire recherche ci-dessous fera l’affaire.

Pour recherche de scalaire, faire ci-dessous fonctionnent comme ci-dessus.

Pour faire de tableau inline ci-dessous, travaillera comme ci-dessus.

49voto

mascip Points 323

Ce blog traite de la meilleure des réponses à cette question.

Comme un résumé, si vous pouvez installer des modules de CPAN le plus lisible les solutions sont:

any(@ingredients) eq 'flour';

ou

@ingredients->contains('flour');

Cependant, un plus commun langage est:

@any { $_ eq 'flour' } @ingredients

Mais s'il vous plaît ne pas utiliser l' first() fonction! Il n'exprime pas l'intention de votre code. N'utilisez pas l' ~~ "Smart match" opérateur: il est cassé. Et n'utilisez pas d' grep() , ni la solution avec un hachage: ils itérer sur l'ensemble de la liste.

any() s'arrêtera dès qu'il détecte votre valeur.

Consultez le blog pour plus de détails.

10voto

paeis Points 79

Même s’il est facile à utiliser, il semble que la solution de convertir-à-hash coûte beaucoup de performance, ce qui a été un problème pour moi.

Sortie de banc d’essai :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X