2011-04-11 10 views
5

कहें कि मेरे पास टीसीएल सूची है, और मैंने अपनी सूची में कुछ तत्व जोड़ दिए हैं। अब मैं यह जांचना चाहता हूं कि मैंने 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 
} 

लेकिन तेजी यह काम नहीं करता। मुझे यह कैसे करना चाहिए? अच्छी तरह? यह जाँच करने के लिए ठीक है अगर {[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

मेरा "मेरा" क्या मतलब है? मैंने 7 वें elem मौजूद है या नहीं, यह जांचने के लिए मैंने {[lindex $ myList 6]] eq ""} का उपयोग किया है। यदि यह अस्तित्व में नहीं है, तो मैं कथन के शरीर में हूं। क्या इसका उपयोग करने की सिफारिश की जाती है? – Narek

+0

"कुछ" सिर्फ एक यादृच्छिक स्ट्रिंग है जिसे मैंने अपने उदाहरण के लिए चुना है। आप निश्चित रूप से उस स्ट्रिंग को प्रतिस्थापित कर सकते हैं जिसे आप पसंद करते हैं। 'If ​​{[lindex $ myList 6]] ==" "} 'सबसे अधिक संभावना काम करेगा, लेकिन इसमें कोई दोष है। मान लें कि आपके पास निम्न सूची है: 'सेट एल {1 2 3 4 5 6 ""} '। इस सूची में 7 तत्व हैं ('लम्बाई $ एल' के आउटपुट की जांच करें)। लेकिन आपका कोड इस सूची का इलाज करेगा जैसे कि इसमें केवल 6 तत्व थे। यदि आप यह जांचना चाहते हैं कि इंडेक्स 'एक्स' पर कोई तत्व मौजूद है या नहीं, तो यह जांचने के लिए' लम्बाई 'का उपयोग करें कि सूची कितनी लंबी है, यह निश्चित रूप से अधिक स्पष्ट है। यदि आप यह जांचना नहीं चाहते हैं कि तत्व का विशिष्ट मान 'लिंडेक्स' है या नहीं। –

+0

ठीक है, धन्यवाद !! – Narek

संबंधित मुद्दे