name - TCL elimina un elemento de una lista
name keywords (5)
Cómo eliminar un elemento de la lista TCL dice:
- que tiene un índice = 4
- que tiene valor = "aa"
He buscado en Google y todavía no he encontrado ninguna función incorporada.
Digamos que quiere reemplazar el elemento "b":
% set L {a b c d}
a b c d
Reemplaza el primer elemento 1 y el último elemento 1 por nada:
% lreplace $L 1 1
a c d
La otra forma de eliminar un elemento es filtrarlo. Esta técnica de Tcl 8.5 difiere del método lsearch
& lreplace
mencionado en otra parte en que elimina todos los elementos de la lista.
set stripped [lsearch -inline -all -not -exact $inputList $elemToRemove]
Lo que no hace es buscar a través de listas anidadas. Eso es una consecuencia de que Tcl no pone esfuerzo en comprender sus estructuras de datos demasiado profundamente. (Puede indicarle que busque mediante la comparación de elementos específicos de las sublistas, a través de la opción -index
).
Simplemente envuelto lo que otros han hecho
proc _lremove {listName val {byval false}} {
upvar $listName list
if {$byval} {
set list [lsearch -all -inline -not $list $val]
} else {
set list [lreplace $list $val $val]
}
return $list
}
Entonces llama con
Inline edit, list lappend
set output [list 1 2 3 20]
_lremove output 0
echo $output
>> 2 3 20
Set output like lreplace/lsearch
set output [list 1 2 3 20]
echo [_lremove output 0]
>> 2 3 20
Remove by value
set output [list 1 2 3 20]
echo [_lremove output 3 true]
>> 1 2 20
Remove by value with wildcar
set output [list 1 2 3 20]
echo [_lremove output "2*" true]
>> 1 3
regsub
también puede ser adecuado para eliminar un valor de una lista.
set mylist {a b c}
puts $mylist
a b c
regsub b $mylist "" mylist
puts $mylist
a c
llength $mylist
2
set mylist {a b c}
puts $mylist
a b c
Eliminar por índice
set mylist [lreplace $mylist 2 2]
puts $mylist
a b
Eliminar por valor
set idx [lsearch $mylist "b"]
set mylist [lreplace $mylist $idx $idx]
puts $mylist
a