2011-04-11 23 views
5

Bir TCL listesi var ve listeme bazı öğeler eklediğimi varsayalım. Şimdi 6 veya 7 elementi eklediğimi kontrol etmek istiyorum.Liste öğesi TCL'de var mı kontrol edilir?

liste elemanı bir dizin tarafından belirtilen yerde var olmadığını kontrol etmek amacıyla ben kullandım:

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

Ama dikişler bu işe yaramaz. Bunu nasıl yapmalıyım? uygun şekilde? kontrol etmek yolunda olup olmadığını {[Lindex $ myList 6]] eq ""}

cevap

4

Bu listeyi buldum çünkü listenin uzunluğunu kontrol etmek yerine listesinin belirli bir öğeyi içerip içermediğini kontrol etmek istedim.

bir eleman, bir liste içinde varsa, lsearch işlevini kullanmak görmek için: Verilen eleman bulunamadığı takdirde

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

lsearch fonksiyonu ilk sırada bulunan elemanın veya -1 dizinini döndürür. -exact, -glob (varsayılan değer) veya -regexp seçenekleri aracılığıyla, model arama türü belirtilebilir.

14

Neden listesinin uzunluğunu kontrol etmek llength kullanmayın: eğer Tabii

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

Öğeyi belirli bir dizinde kontrol etmek, sonra o öğeyi almak ve sonra bunu kontrol etmek için lindex kullanın. Örneğin. if {[lindex $myList 6] == "something"}

info exists komutu kullanılarak kodunuz çalışmıyor, çünkü info exists komutu bir değişkenin var olup olmadığını kontrol ediyor. Yani, temelde adı [lindex $myList 6] tarafından döndürülen değere eşit olan bir değişken olup olmadığını kontrol ediyorsunuz.

+0

Ne demek "benim" demek? 7. elem'in var olup olmadığını kontrol etmek için {[lindex $ myList 6]] eq ""} ifadesini kullandım. Varsa, if ifadesinin gövdesindeyim. Kullanılması tavsiye edilir mi? – Narek

+0

"Bir şey" benim örneğim için seçtiğim sadece rastgele bir dizedir. Elbette bunu istediğiniz herhangi bir dizeyle değiştirebilirsiniz. “If {[lindex $ myList 6]] ==" "}' büyük olasılıkla işe yarayacak, ancak bir kusuru var. Aşağıdaki listeye sahip olduğunuzu varsayalım: 'set l {1 2 3 4 5 6" "}'. Bu listede 7 eleman bulunmaktadır (llength $ l' çıkışını kontrol ediniz). Fakat kodunuz bu listeyi sadece 6 elemente sahipmiş gibi ele alırdı. Eğer 'X' indeksinde bir eleman olup olmadığını kontrol etmek isterseniz, listenin o kadar uzun olup olmadığını kontrol etmek için 'llength' kullanın, kesinlikle daha açıktır. Eğer elemanın belirli bir değeri olup olmadığını kontrol etmediyseniz 'lindex' kullanın. –

+0

Tamam, teşekkürler! – Narek

İlgili konular