サーチ…
備考
Tclの中の辞書は他の任意の値に任意の値からのマッピングを保持する値です。それらはTcl 8.5で導入されましたが、(今サポートされていない)Tcl 8.4のバージョンは限られています。辞書は、偶数の要素を持つリストと構文的に同じです。最初の要素のペアは辞書の最初のキーと値、2番目のペアは2番目のタプルです。
従って:
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}
空白はリストと同じように重要ではありません。
辞書の重要な概念は反復順序です。辞書はキーの挿入順序を反復順序として使用しようとしますが、すでに存在するキーの値を更新すると、そのキーの値が上書きされます。新しいキーが最後に移動します。
参照: dict
リスト - ネストされた辞書に追加
この辞書があれば:
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
コマンドがキートークンがどこで終了し、値がリストに追加されるかを知ることは不可能であるため、コマンドは1つのキートークンに制限されます。
内側の辞書に追加する正しい方法は次のとおりです。
dict with alpha alice {
lappend items fork peanut
}
dict get $alpha alice
# => items {fork peanut}
これは、 dict withコマンドでは、私たちが提供するキートークンの数と同じくらい多くのレベルで、ネストされた辞書をトラバースできるためです。次に、そのレベルのキーと同じ名前の変数を作成します(ここではitems 1つだけです)。変数は、辞書内の対応する項目の値に初期化されます。値を変更すると、その変更された値は、スクリプト終了時に辞書項目の値を更新するために使用されます。
(コマンドが終了しても変数は存在し続けることに注意してください)。
辞書の基本的な使い方
辞書の作成:
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"
}
}
dict getコマンドはエラーを発生させる可能性があります
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
}
欠落しているキーを処理する方法は、状況によって異なります。単純な方法の1つは、 resultをデフォルトの「空の」値に設定するresultです。
コードが辞書にある他のキーを検索しようとしない場合、 dict getはもちろん失敗しません。しかし、任意のキーでは、 dict getは保護される必要のある操作です。例外を捕捉することもdict exists 、 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を使ってdict keysをリストし、それを反復することによって同じ出力を得るでしょう:
foreach theKey [dict keys $theDict] {
set theValue [dict get $theDict $theKey]
puts "$theKey -> $theValue"
}
しかしdict forより効率的です。