2010-10-28 7 views
3

Je souhaite rechercher un élément dans un tableau. Ce que je veux obtenir de cette recherche, c'est tous les indices du tableau où je trouve une correspondance.perl Obtenir les index des correspondances dans le tableau

Ainsi, par exemple le mot que je veux rechercher est:

$myWord = cat 

@allMyWords = my whole file with multiple occurrences of cat in random positions in file 

Donc, si le chat se produit à 3, 19 et la position 110e, je veux les indices en raison de celui-ci. Je me demandais s'il y avait une méthode petite et simple pour le faire.

Merci!

Répondre

8

J'ai eu la réponse. C'est le code qui retournera tous les indices dans le tableau où un élément que nous recherchons est trouvé.

my(@index)= grep { $allMyWords[$_] eq $word } 0..$#allMyWords; 
print "Index : @index\n"; 
+0

Mais c'est un problème mineur. Globalement, cela ressemble à la méthode la plus élégante. –

+0

Pour ceux comme moi qui cherchent une chaîne équivalente: 'mes @locations = grep {substr ($ aString, $ _, 1) eq" C "} 0 .. (longueur ($ aString))' –

7

Avec List::MoreUtils:

use List::MoreUtils qw(indexes); 

my @indexes = indexes { $_ eq 'cat' } @words; 

Si vous avez lu le fichier encore, vous pouvez le lire en utilisant "mode slurp":

local $/; # enable slurp mode 
my @words = split(/\s+/, <>); 
Questions connexes