TCL supprimer un élément d'une liste
Comment te supprimer un élément d'une liste TCL dire:
- qui a un indice = 4
- qui a une valeur = "aa"
J'ai googlé et je n'ai pas encore trouvé de fonction intégrée.
5 réponses
set mylist {a b c}
puts $mylist
a b c
supprimer par index
set mylist [lreplace $mylist 2 2]
puts $mylist
a b
Supprimer par valeur
set idx [lsearch $mylist "b"]
set mylist [lreplace $mylist $idx $idx]
puts $mylist
a
L'autre façon de supprimer un élément de filtre. Cette technique Tcl 8.5 diffère de la lsearch
&lreplace
méthode mentionnée ailleurs en ce qu'elle supprime d'un élément donné de la liste.
set stripped [lsearch -inline -all -not -exact $inputList $elemToRemove]
ce qu'il ne fait pas, c'est chercher dans les listes imbriquées. C'est une conséquence du fait que Tcl ne met pas trop d'efforts pour comprendre vos structures de données. (Vous pouvez lui dire de rechercher en comparant des éléments spécifiques des sous-listes cependant, via le -index
option.)
disons que vous voulez remplacer l'élément "b":
% set L {a b c d}
a b c d
Vous remplacez le premier élément 1 et le dernier élément 1 par rien:
% lreplace $L 1 1
a c d
regsub
peut aussi être approprié pour supprimer une valeur d'une liste.
set mylist {a b c}
puts $mylist
a b c
regsub b $mylist "" mylist
puts $mylist
a c
llength $mylist
2
tout Juste de terminer ce que les autres ont fait
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
}
alors appelez avec
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