は私がkey1 value1
Tclはキー名
でdictのsomedict
を考えてみましょう変更DICT key1
を変更する方法はあります、somekey1
はkey1
を削除し、somekey1
のための新記録をせずにする、のは言わせて?
は私がkey1 value1
Tclはキー名
でdictのsomedict
を考えてみましょう変更DICT key1
を変更する方法はあります、somekey1
はkey1
を削除し、somekey1
のための新記録をせずにする、のは言わせて?
lappend
辞書に新しい変数を設定して、古い変数から新しい変数に値を設定し、次にunset
という古いキーを設定できます。
set somedict [dict create key1 "black dict" key2 "white dict"]
//dict update somedict key1 varKey1 {
// dict lappend somedict someKey1 $varKey1
// unset varKey1
//}
//or
set rename key1
set to someKey1
set somedict [dict replace $somedict $to {[dict get $somedict $rename][dict unset $somedict $rename]}]
set value [dict get $somedict someKey1]
puts $value
詳細については、TCL Dictionaryを参照してください。
変数の名前を変更するコマンドを探している場合、TCLにそのようなものはありません。
それは私もやったと思ったが、より効率的な方法があるかもしれないと思った。 –
もっと効率的な方法はありません。基になるテーブルに新しいハッシュエントリを作成する必要があります。そうでなければデータを移動することは安いです。エントリの内容は参照によって転送されます。 –
このソリューションは現在動作しません。 –
辞書はリストでもあり、文字列でもあるという事実を利用することができます。
通常、操作とマニフェストタイプを混同しないように伝えます(つまり、文字列に対してリスト操作を使用しないなど)。しかし音楽のように、Tclではあなたが何をやっているのか分かっていれば、すべてのルールが壊れる可能性があります。 (12の構文規則を除き、これらは神聖です。)
この辞書を考える:
% set somedict [dict create key1 "black dict" key2 "white dict"]
key1 {black dict} key2 {white dict}
あなたは、文字列変換を行うことができます。
% set somedict [string map {key1 somekey1} $somedict]
somekey1 {black dict} key2 {white dict}
は、そして、あなたは新しい機能の辞書を取得します:
% dict get $somedict somekey1
black dict
(値は短く文字列値になりますが、それはdictionaに戻ります)
これはちょっと危険ですが、string map
は長い文字列の中など、見つかったすべての文字に置換を行います。
あなたは順番に変更したいキーを知っているならば、あなたは単純なリスト変換を使用することができます。
% lset somedict 0 somekey1
somekey1 {black dict} key2 {white dict}
それがどこにあるかわからない場合、あなたはそれを検索することができます(それが良いこと
% lset somedict [lsearch $somedict key1] somekey1
somekey1 {black dict} key2 {white dict}
それは醜いですが、それは簡単です:しかし、そうでない場合がありlset
は-1)の要素を変更しようとします。
辞書に新しいレコードを追加しますか? –
いいえ、私はちょうどキーの名前を変更したい –