假设我创建了一个这样的数组:
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}
我怎么能这样做?
答案 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,则应升级。
文档: continue, foreach, if, lmap (for Tcl 8.5), lmap, ni (operator), set