2011-04-11 20 views
5

Digamos que tengo una lista de TCL, y he agregado algunos elementos a mi lista. Ahora quiero verificar si he agregado 6 o 7 elementos.¿Cómo verificar si existe elemento de lista en TCL?

Con el fin de comprobar si existe el elemento de lista en el lugar especificado por un índice que han utilizado:

if { [info exists [lindex $myList 6]] } { 
#if I am here then I have appended 7 elems, otherwise it should be at least 6 
} 

Pero costuras esto no funciona. ¿Cómo debería hacer eso? ¿correctamente? Está bien para comprobar si {[lindex $ miLista 6]] eq ""}

Respuesta

4

Encontré esta pregunta porque quería verificar si una lista contiene un elemento específico, en lugar de simplemente verificar la longitud de la lista.

para ver si existe un elemento dentro de una lista, utilice la función lsearch:

if {[lsearch -exact $myList 4] >= 0} { 
    puts "Found 4 in myList!" 
} 

La función lsearch devuelve el índice del primer elemento que se encuentra o -1 si no se encontró el elemento dado. A través de las opciones -exact, -glob (que es el valor predeterminado) o -regexp, se puede especificar el tipo de búsqueda de patrón.

14

¿Por qué no usar llength para comprobar la longitud de su lista:

if {[llength $myList] == 6} { 
    # do something 
} 

Por supuesto, si desea verificar el elemento en un índice específico, luego use lindex para recuperar ese elemento y verificarlo. p.ej. if {[lindex $myList 6] == "something"}

Su código utilizando info exists no funciona, porque el comando info exists comprueba si existe una variable. Entonces, básicamente, verifica si hay una variable cuyo nombre sea igual al valor devuelto por [lindex $myList 6].

+0

¿Qué quieres decir con mi "algo"? He usado if {[lindex $ myList 6]] eq ""} para verificar si el 7mo elem existe. Si no existe, estoy en el cuerpo de la declaración if. ¿Se recomienda usar? – Narek

+0

"algo" es solo una cadena aleatoria que elegí para mi ejemplo. Por supuesto, puede reemplazar eso con cualquier cadena que desee. El 'if {[lindex $ myList 6]] ==" "}' funcionará muy probablemente, pero tiene un defecto. Supongamos que tiene la siguiente lista: 'set l {1 2 3 4 5 6" "}'. Esta lista tiene 7 elementos (verifique el resultado de 'llength $ l'). Pero su código trataría esta lista como si solo tuviera 6 elementos. Si desea verificar si un elemento existe en el índice 'X', use' llength' para verificar si la lista es tan larga, definitivamente es más explícito. Si quiere comprobar si el elemento tiene un valor específico, use 'lindex'. –

+0

Ok, gracias! – Narek

Cuestiones relacionadas