2017-09-15 1 views
0

eine Liste Mitalle Indizes holen, wo Such Element in der Liste ist, nicht nur die erste

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

wollen gesucht werden ich alle Indizes finden, wo die Suchzeichen in Heuhaufen vorhanden ist:

set needle e 

ich habe versucht,

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

zu verwenden, aber ich habe nicht die erwartete Antwort 4 5 7.

+1

'set foundat [lsearch -all $ Heuhaufen $ needle]' gibt, was Sie wollen. –

Antwort

0

Der Befehl:

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

findet alle Orte, die $needle in $haystack ist und eine Liste mit all diesen Orten. Das ist eine Liste von Zahlen. Es vergleicht dann diese Liste als eine Zeichenfolge mit dem Wert 0, außer wenn die Liste nur ein Element enthält, aber der Effekt ist derselbe, da es im Grunde endet, einen wahren Wert für jedes Ergebnis zu erzeugen, wo ein Wert gefunden wird. Aber wirklich wollen Sie gerade:

set foundat [lsearch -all $haystack $needle] 

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

Nichts gefunden? Leere Liste. Etwas gefunden? Nicht leere Liste.

3

Dies wird dir geben, was Sie wollen:

lsearch -all $haystack $needle 

Was Sie schrieb:

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

Orte in foundat wenn die Suche oder nicht gefunden wurde.

0

Liste, die Sie erwähnt haben

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

set needle e 

Das wird dir geben, was Sie wollen:

set e_index [lsearch -all $haystack $needle] 

puts $e_index 
Verwandte Themen