खोज…
टिप्पणियों
Tcl में शब्द वे मान होते हैं जो मनमाने मानों से दूसरे मनमानी मानों की मैपिंग करते हैं। उन्हें Tcl 8.5 में पेश किया गया था, हालांकि (अब असमर्थित) Tcl 8.4 के लिए सीमित संस्करण हैं। शब्दकोश तत्वों के समान संख्याओं वाली सूचियों के समान ही वाक्यविन्यास होते हैं; तत्वों की पहली जोड़ी शब्दकोश की पहली कुंजी और मूल्य है, दूसरी जोड़ी दूसरी टपल है।
इस प्रकार:
fox "quick brown" dogs "lazy"
एक मान्य शब्दकोश है। एक ही कुंजी कई बार हो सकती है, लेकिन यह ठीक उसी तरह है जैसे कि बाद का मूल्य पहले के मूल्य में था; ये एक ही शब्दकोश हैं:
abcd {1 2 3} defg {2 3 4} abcd {3 4 5}
abcd {3 4 5} defg {2 3 4}
व्हॉट्सएप महत्वहीन है, जैसे सूचियों के साथ।
शब्दकोशों के साथ एक महत्वपूर्ण अवधारणा पुनरावृत्ति क्रम है; शब्दकोशों कुंजी प्रविष्टि क्रम को उनके पुनरावृत्ति क्रम के रूप में उपयोग करने का प्रयास करते हैं, हालांकि जब आप उस कुंजी के लिए मान को अद्यतन करते हैं जो पहले से मौजूद है, तो आप उस कुंजी के मान को अधिलेखित कर देते हैं। नई चाबियाँ अंत में जाती हैं।
संदर्भ: तानाशाही
एक नेस्टेड शब्दकोश के लिए सूची-जोड़
अगर हमारे पास यह शब्दकोष है:
set alpha {alice {items {}} bob {items {}} claudia {items {}} derek {items {}}}
और ऐलिस की वस्तुओं में "कांटा" और "मूंगफली" जोड़ना चाहते हैं, यह कोड काम नहीं करेगा:
dict lappend alpha alice items fork peanut
dict get $alpha alice
# => items {} items fork peanut
क्योंकि कमांड के लिए यह जानना असंभव होगा कि कुंजी कहां समाप्त होती है और मूल्यों को सूची-जोड़ा जाना शुरू होता है, कमांड एक कुंजी टोकन तक सीमित है।
आंतरिक शब्दकोश में संलग्न करने का सही तरीका यह है:
dict with alpha alice {
lappend items fork peanut
}
dict get $alpha alice
# => items {fork peanut}
यह काम करता है क्योंकि कमांड के dict with हमें नेस्टेड डिक्शनरी देता है, जितने स्तर हम प्रदान करते हैं उतने ही महत्वपूर्ण टोकन। यह तब उसी स्तर पर कुंजियों के नाम के साथ चर बनाता है (केवल यहां एक: items )। शब्दकोष में संबंधित आइटम के मूल्य के लिए वैरिएबल को प्रारंभ किया जाता है। यदि हम मूल्य को बदलते हैं, तो स्क्रिप्ट के समाप्त होने पर शब्दकोश आइटम के मूल्य को अपडेट करने के लिए उस बदले हुए मूल्य का उपयोग किया जाता है।
(ध्यान दें कि कमांड के समाप्त होने पर वैरिएबल मौजूद रहता है।)
शब्दकोश का मूल उपयोग
एक शब्दकोश बनाना:
set mydict [dict create a 1 b 2 c 3 d 4]
dict get $mydict b ; # returns 2
set key c
set myval [dict get $mydict $key]
puts $myval
# remove a value
dict unset mydict b
# set a new value
dict set mydict e 5
शब्दकोश कुंजियों को नेस्टेड किया जा सकता है।
dict set mycars mustang color green
dict set mycars mustang horsepower 500
dict set mycars prius-c color orange
dict set mycars prius-c horsepower 99
set car [dict get $mycars mustang]
# $car is: color green horsepower 500
dict for {car cardetails} $mycars {
puts $car
dict for {key value} $cardetails {
puts " $key: $value"
}
}
तानाशाह की आज्ञा एक त्रुटि बढ़ा सकती है
set alpha {a 1 b 2 c 3}
dict get $alpha b
# => 2
dict get $alpha d
# (ERROR) key "d" not known in dictionary
यदि गायब हो रही कुंजी के मूल्य को पुनः प्राप्त करने के dict get जाती है, तो एक त्रुटि उठाई जाती है। त्रुटि को रोकने के लिए, dict exists उपयोग करें:
if {[dict exists $alpha $key]} {
set result [dict get $alpha $key]
} else {
# code to deal with missing key
}
पाठ्यक्रम की अनुपलब्ध कुंजी से कैसे निपटें, यह स्थिति पर निर्भर करता है: एक सरल तरीका यह है कि result को डिफ़ॉल्ट "खाली" मान पर सेट किया जाए।
कोड कभी नहीं अन्य कुंजियों कि शब्दकोश में हैं पुनः प्राप्त करने के प्रयास करता है, dict get निश्चित रूप से असफल नहीं होंगे। लेकिन मनमानी कुंजी के लिए, dict get करना एक ऑपरेशन है जिसे संरक्षित करने की आवश्यकता है। अधिमानतः के साथ परीक्षण के साथ dict exists , हालांकि अपवाद पकड़ने भी काम करेगा।
एक शब्दकोश से अधिक
आप के साथ एक शब्दकोश की सामग्री पर पुनरावृति कर सकते हैं dict for , जो के समान है foreach :
set theDict {abcd {ab cd} bcde {ef gh} cdef {ij kl}}
dict for {theKey theValue} $theDict {
puts "$theKey -> $theValue"
}
यह इस उत्पादन का उत्पादन करता है:
abcd -> ab cd bcde -> ef gh cdef -> ij kl
आपको dict keys को सूचीबद्ध करने और उस पर पुनरावृत्ति करने के लिए प्रमुख कुंजियों का उपयोग करके समान आउटपुट मिलेगा:
foreach theKey [dict keys $theDict] {
set theValue [dict get $theDict $theKey]
puts "$theKey -> $theValue"
}
लेकिन के लिए dict for अधिक कुशल है।