ldelete

 

Kroc - 17 Septembre 2007 : Encore une commande qui me manquait pour manipuler les listes. Celle-ci permet de retourner une liste $liste sans l'élément $index (qui est un index, alors que dans lremove on enlève les éléments selon un patron).

 proc ::ldelete {liste index} {
    if {[llength $liste] <= 1} {return $liste}
    if {$index +1 > [llength $liste]} {return $liste}
    if {$index +1 == [llength $liste]} {set index end}
    if {$index == 0} {
        set range [list 0 1]
        set index 1
    } elseif {$index eq "end"} {
        set index [expr {[llength $liste]-2}]
        set range [list $index [expr {[llength $liste]-1}]]
    } elseif {![string is integer -strict $index]} {
        return $liste
    } else {
        set range [list $index [incr index]]
    }
    return [eval lreplace [list $liste] $range [list [lindex $liste $index]]]
 }

Utilisation :

 % set maliste {{A B C} {D E F} {G H I} {J K} L}
 % ldelete $maliste 3
 {A B C} {D E F} {G H I} L
 % ldelete $maliste end
 {A B C} {D E F} {G H I} {J K}

Voir également :

lremove, list, lsearch, lreplace, lreverse, lset