如何检查TCL中是否存在列表元素?

时间:2011-04-11 06:37:39

标签: list tcl exists

假设我有一个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
}

但接缝这不起作用。我应该怎么做?正常吗?可以检查 if {[lindex $ myList 6]] eq“”}

3 个答案:

答案 0 :(得分:14)

为什么不使用llength来检查列表的长度:

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

当然,如果要检查特定索引处的元素,则使用lindex检索该元素并进行检查。例如if {[lindex $myList 6] == "something"}

使用info exists的代码无效,因为info exists命令检查变量是否存在。所以你基本上检查是否有一个变量,其名称等于[lindex $myList 6]返回的值。

答案 1 :(得分:5)

我发现了这个问题,因为我想检查列表是否包含特定项,而不仅仅是检查列表的长度。

要查看列表中是否存在元素,请使用lsearch函数:

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

lsearch函数返回第一个找到的元素的索引,如果找不到给定的元素,则返回-1。通过-exact-glob(默认值)或-regexp选项,可以指定模式搜索的类型。

答案 2 :(得分:1)

检查TCL列表中是否存在的另一种方法是简单地使用'in',例如:

if {"4" in $myList} {
    puts "Found 4 in my list"
}

它更干净/更易读!