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

Nar*_*rek 8 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
}
Run Code Online (Sandbox Code Playgroud)

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

übe*_*sus 15

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

if {[llength $myList] == 6} {
    # do something
}
Run Code Online (Sandbox Code Playgroud)

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

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


Fri*_*dFX 8

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

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

if {[lsearch -exact $myList 4] >= 0} {
    puts "Found 4 in myList!"
}
Run Code Online (Sandbox Code Playgroud)

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


And*_*ney 7

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

if {"4" in $myList} {
    puts "Found 4 in my list"
}
Run Code Online (Sandbox Code Playgroud)

它稍微干净/更具可读性!