从tcl中的列表中删除元素

时间:2012-12-03 20:39:55

标签: list tcl

如何从tcl中的列表中删除每个偶数索引元素?我用了

    for {set i 0} {$i <[llength $a]} {incr i} {
    if {[expr $i % 2] == 0} {
     lreplace $a [lindex $a $i] [lindex $a $i] 
    }

但是每当我删除元素时如何使用lreplace更新变量

2 个答案:

答案 0 :(得分:2)

创建新列表并添加所需元素可能要容易得多。在foreach下方将成对出行列表,并将第一个附加到新列表中。这也适用于具有奇数个元素的列表。 j的最后一次值只是空的。

set a "0 1 2 3 4 5 6 7 8 9 10"                                          

set result []                                                        
foreach {i j} $a {                                                   
    lappend result $i                                                
}                                                                    

puts $result                                                         

结果将是

0 2 4 6 8 10

请注意,TCL中大多数与列表相关的命令都采用列表的名称(例如lreplace A 0 0),而不是值( lreplace $ A 0 0

答案 1 :(得分:1)

使用您的技术,您需要更改incr命令:

% set a {a b c e f g h}
a b c e f g h
% for {set i 1} { $i < [llength $a] } {incr i 2} {lappend c [lindex $a $i]}
% puts $c
b e g
%