摆脱TCL中的元素

时间:2018-01-29 19:22:16

标签: arrays tcl

假设我创建了一个这样的数组:

for {set i 1} {$i <=4} {incr i} {
    lappend run "$i [expr $i+1]"
}

puts "$run"

{1 2} {2 3} {3 4} {4 5}

现在我想找到包含2的元素并将其删除,这样我就会留下

run ={3 4} {4 5}

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

首先:数组是Tcl中的关联结构。您在此处创建的是列表

从列表中过滤掉元素的通常习惯是做这样的事情(伪代码):

set result [lmap item $list {if <test-to-keep> {set item} else continue}]

set result {}
foreach item $list {if <test-to-keep> {lappend result $item}}

lmap命令在Tcl 8.6或更高版本中可用,但在Tcl 8.5中有一个可用的纯Tcl版本,您可以复制并粘贴到下面链接中提到的程序中。)

对于此示例,您可以使用此解决方案:

set result [lmap item $run {if {2 ni $item} {set item} else continue}]

也就是说,查看每个项目,如果其中没有2,请保留它。

ni运算符在Tcl 8.5或更高版本中:如果您有较旧的Tcl,则应升级。

文档: continueforeachiflmap (for Tcl 8.5)lmapni (operator)set