Как проверить, существует ли элемент списка в TCL? - PullRequest
8 голосов
/ 11 апреля 2011

Скажем, у меня есть список TCL, и я добавил некоторые элементы в свой список.Теперь я хочу проверить, добавил ли я 6 или 7 элементов.

Чтобы проверить, существует ли элемент списка в месте, указанном индексом, который я использовал:

if { [info exists [lindex $myList 6]] } {
#if I am here then I have appended 7 elems, otherwise it should be at least 6
}

Но швыэто не работает.Как мне это сделать?должным образом?Можно проверить , если {[lindex $ myList 6]] eq ""}

Ответы [ 2 ]

14 голосов
/ 11 апреля 2011

Почему бы вам не использовать llength для проверки длины вашего списка:

if {[llength $myList] == 6} {
    # do something
}

Конечно, если вы хотите проверить элемент по определенному индексу, тогда используйте lindexчтобы извлечь этот элемент и проверить это.Например, if {[lindex $myList 6] == "something"}

Ваш код, использующий info exists, не работает, потому что команда info exists проверяет, существует ли переменная.Таким образом, вы в основном проверяете, существует ли переменная, имя которой равно значению, возвращаемому [lindex $myList 6].

6 голосов
/ 10 июля 2015

Я нашел этот вопрос, потому что хотел проверить, содержит ли список определенный элемент , а не просто проверять длину списка.

Чтобы узнать, существует ли элемент в списке, используйте функцию lsearch:

if {[lsearch -exact $myList 4] >= 0} {
    puts "Found 4 in myList!"
}

Функция lsearch возвращает индекс первого найденного элемента или -1, если данный элемент не был найден. С помощью параметров -exact, -glob (по умолчанию) или -regexp можно указать тип поиска по шаблону.

...