2017-03-09 10 views
1

私はキー値のペアリストであるリストを持っています。次のようなものTclの配列にキー値リストを割り当てます

key1 value1 key2 value2 key3 value3 

これを配列または辞書にマップしたいと思います。

は現在、私のコードはPerlでこの

for {set i 0} {$i < [llength $list]} {incr i} { 
    if {[expr {fmod($i,2)}] == 0} { 
    set key [lindex $list $i] 
    } else { 
    set v_array(${key}) [lindex $list $i] 
    } 
} 

のように見える、私は、これは1回のパスでのキー値の辞書に割り当てることができます知っています。そのような簡単なメソッドはTclにありますか?

答えて

5

% set list [list key1 value1 key2 value2 key3 value3] 
key1 value1 key2 value2 key3 value3 
% array set v_array $list 

をそして、あなたが内容を確認したい場合は、あなたはparray(Tcl 8.5以降)を使うことができます:

% parray v_array 
v_array(key1) = value1 
v_array(key2) = value2 
v_array(key3) = value3 

他の配列コマンドのドキュメントが見つかりましたhereとそれぞれの例があります。 (ここでは

foreach {a b} $list { 
    set v_array($a) $b 
} 

foreach$listの要素を取っている:あなたは何とか容易になるだろうforeachを使用して、その後、ループを避けることができない場合は


(リストは偶数個の要素を持っていることを確認し)一度に2つのaとb)

+0

おかげで、それは私が探していたもののように見えます。 – Jonjilla

1

Tclで辞書を作成/操作するコマンドはdictです。

% set mydict [dict create key1 value1 key2 value2 key3 value3] 
key1 value1 key2 value2 key3 value3 
% dict get $mydict 
key1 value1 key2 value2 key3 value3 
% dict get $mydict key3 
value3 
% dict get $mydict key1 
value1 
% 

でもdict createコマンドなしで、あなたは、それがキーと値の形式であるとしても、リストからキーと値へのアクセス/フェッチ一直線ことができます。すなわち偶数個の要素を含む。例えば

あなたはお気づきのように、

% set mylist {key1 value1 key2 value2 key3 value3} 
key1 value1 key2 value2 key3 value3 
% dict get $mylist key2 
value2 

、私はここでdict createコマンドを使用しますが、まだ辞書の項目にアクセスすることはできませんでした。

参考:あなたは1行の配列(私はリストを定義するために1行を使用しています)を作成することができdict

1

最も簡単な解決策に割り当てる:

set mylist {key1 value1 key2 value2 key3 value3} 
array set arr $mylist 

それはそうです。

ここで、確認するためにparrayを実行します。

ファイル:T3

# 
set list [list key1 value1 key2 value2 key3 value3] 
array set arr $list 
parray arr 
# 

Execute the file: tclsh t3 
arr(key1) = value1 
arr(key2) = value2 
arr(key3) = value3 
関連する問題