2017-09-15 2 views
0

Avoir une liste à fouillerObtenez tous les index où un objet de recherche est dans la liste, non seulement la première

set haystack [list a b c d e e f e] 

Je veux trouver tous les indices où le searchString est présent dans botte de foin:

set needle e 

J'ai essayé d'utiliser

set foundat [expr {[lsearch -all $haystack $needle] >= 0}] 

Mais je ne suis pas la réponse attendue 4 5 7.

+1

'set Fondat [lsearch -Tous $ botte de foin aiguille $]' donne ce que vous voulez. –

Répondre

0

La commande:

set foundat [expr {[lsearch -all $haystack $needle] >= 0}] 

trouve tous les endroits que $needle est en $haystack et produit une liste de tous les lieux. C'est une liste de nombres. Il compare ensuite cette liste sous forme de chaîne avec la valeur 0 sauf si la liste contient un seul élément, mais l'effet est le même car il finit par produire une valeur vraie pour tout résultat où une valeur est trouvée. Mais vraiment vous voulez juste:

set foundat [lsearch -all $haystack $needle] 

set haveFoundAny [expr { [llength $foundat] != 0 }] 

Rien trouvé? Liste vide Quelque chose trouvé? Liste non vide

3

Cela vous donnera ce que vous voulez:

lsearch -all $haystack $needle 

Qu'est-ce que vous avez écrit:

set foundat [expr {[lsearch -all $haystack $needle] >= 0}] 

Places dans Fondat si la recherche a été trouvée ou non.

0

Liste que vous avez mentionné

set haystack [list a b c d e e f e] 

set needle e 

Cela vous donnera ce que vous voulez:

set e_index [lsearch -all $haystack $needle] 

puts $e_index