我看了TCL remove an element from a list,它似乎对我不起作用。一些代码例如:
set mylist [list {a b c} {d e f} {g h i}]
这就是我想要发生的事情:
set idx [lsearch $mylist "a"]; # or if "d", it should take out {d e f} instead. Likewise, if "g" it should take out {g h i}
set mylist [lreplace $mylist $idx $idx]
puts "$mylist"
Output:
{d e f} {g h i}
这是实际发生的事情:
Output:
{a b c} {d e f} {g h i}
当我输入$ idx时,无论我搜索什么,它都会显示“-1”。我知道删除具有牢固索引的元素很容易,但我需要程序能够搜索列表中的元素以将其删除。基本上,如何通过仅搜索其中的一部分来找到要删除的元素的索引?
编辑:没关系。我发现你需要在你的搜索中使用*。由于我还没有在其他任何地方看过它,我会留下我原来的问题,以及我找到的解决方案:set label "a"
set idx [lsearch $mylist $label*]
set mylist [lreplace $mylist $idx $idx]
Output:
{d e f} {g h i}
答案 0 :(得分:1)
您是否一直在每个子列表的第一个元素中查找搜索词?如果是这样,您可以使用lsearch
' -index
选项,该选项指定要检查每个元素的哪个部分:
set mylist [list {a b c} {d e f} {g h i}]
set label "a"
set idx [lsearch -index 0 -exact $mylist $label]
set mylist [lreplace $mylist $idx $idx]