假设我有一个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“”}
答案 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"
}
它更干净/更易读!