Я посмотрел TCL remove an element from a list, и он, похоже, не работает для меня. Часть кода, например:удалить элемент из списка списков tcl по значению
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» независимо от того, что я ищу. Я знаю, что легко удалить элементы с индексом фирмы, но мне нужна программа, чтобы иметь возможность искать элементы списка, чтобы удалить его. В принципе, как мне найти индекс элемента, который я хочу удалить, только для поиска его одной части?
EDIT: Nevermind. Я понял, что вам нужно использовать * в своем поиске. Так как я не видел его где-нибудь еще здесь, я оставлю мой первоначальный вопрос, и решение, которое я нашел:
set label "a"
set idx [lsearch $mylist $label*]
set mylist [lreplace $mylist $idx $idx]
Output:
{d e f} {g h i}
Это государственный праздник в большом количестве в мире; вещи немного медленнее, чем обычно. –
Ваш шаблон поиска '$ label *' означает, что вы найдете только элементы, которые * начинаются с * данной меткой. –