2011-04-11 274 views
5

假設我有一個TCL列表,並且在列表中添加了一些元素。現在我想檢查我是否添加了6或7個元素。如何檢查TCL中是否存在列表元素?

爲了檢查是否在索引指定的地方存在列表元素我用:

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 「」}

回答

4

我發現這個問題,因爲我想檢查一個列表是否包含特定項目,而不僅僅是檢查列表的長度。

要查看如果一個元素的列表中存在,則使用lsearch功能:如果未找到給定元素

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

lsearch函數返回找到的第一個元件或-1的索引。通過-exact,-glob(這是默認值)或-regexp選項,可以指定模式搜索的類型。

14

你爲什麼不使用llength檢查列表的長度:

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

當然,如果您想要檢查特定索引處的元素,然後使用lindex來檢索該元素並檢查該元素。例如if {[lindex $myList 6] == "something"}

使用info exists的代碼不起作用,因爲info exists命令檢查是否存在變量。所以你基本上檢查是否有一個變量的名字等於[lindex $myList 6]返回的值。

+0

你的意思是我的「東西」?我用if [[lindex $ myList 6]] eq「」}來檢查第7個元素是否存在。如果它不存在,我在if語句的主體中。建議使用嗎? – Narek 2011-04-11 15:12:41

+0

「something」只是我爲示例選擇的隨機字符串。你當然可以用你喜歡的任何字符串替換它。 'if {[lindex $ myList 6]] ==「」}'很可能會起作用,但它確實有缺陷。假設你有以下列表:'set l {1 2 3 4 5 6「」}'。該列表有7個元素(檢查'llength $ l'的輸出)。但是你的代碼會把這個列表看作只有6個元素。如果你想檢查一個元素是否存在於索引'X'處,使用'llength'來檢查列表是否很長,這肯定更明確。如果你不想檢查元素是否具有特定值,請使用'lindex'。 – 2011-04-11 19:59:08

+0

好的,謝謝! – Narek 2011-04-12 03:55:12

相關問題