假设我创建了一个这样的数组:
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}我怎么能做到呢?
发布于 2018-01-30 03:53:29
首先:在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命令在Tcl8.6或更高版本中可用,但在Tcl8.5中有一个纯Tcl版本,您可以将其复制并粘贴到下面的链接中提到的程序中。)
对于此示例,您可以使用此解决方案:
set result [lmap item $run {if {2 ni $item} {set item} else continue}]也就是说,查看每一项,如果其中没有出现2,则保留它。
ni操作符在Tcl8.5或更高版本中:如果你有一个旧的Tcl,你应该升级。
文档:continue、foreach、if、lmap (for Tcl 8.5)、lmap、ni (operator)、set
https://stackoverflow.com/questions/48508518
复制相似问题