tag name lista keywords list element tcl

name - TCL elimina un elemento de una lista



name keywords (5)

Cómo eliminar un elemento de la lista TCL dice:

  1. que tiene un índice = 4
  2. 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