tcl tablelist 删除具有特定条目的所有行

tcl tablelist delete all rows with certain entry

有一个 table 列表,我想删除第一列中包含字符串的所有行。

set Joints      [.dsm.nb.f11.jointData_f11 getcolumns cJoint  ]
set killrow 0
foreach Joint $Joints {                                
         if { $Joint eq "" } {                                        
               .dsm.nb.f11.jointData_f11 delete $killrow $killrow 
         }
              incr killrow        
}

问题是 table 的行索引在行被删除时发生变化,因此在第一个删除命令之后,一切都变得一团糟。处理这个问题的最佳方法是什么?有我可以使用的内置功能吗?

完成这项工作的最简单方法是向后遍历列表。 lreverse 很有帮助。

set Joints [.dsm.nb.f11.jointData_f11 getcolumns cJoint]
set killrow 0
set rowsToKill {}
foreach Joint $Joints {
    if {$Joint eq ""} {
        lappend rowsToKill $killrow
    }
    incr killrow
}
foreach killrow [lreverse $rowsToKill] {
    .dsm.nb.f11.jointData_f11 delete $killrow $killrow
}

是的,您在列表上迭代了几次。以这种方式做仍然比尝试以其他方式做更简单。