2011-07-15 4 views
3

リストを作成したいと思います。リストの各要素は、C言語の構造体の配列と同様に配列です。
TCLで行うことはできますか?どうもありがとう!あなたは配列のリストを作成することはできませんが、機能的に同じこと(キーのマッピングであるdictsのリストを作成することができます配列のリストとその方法を作成できますか?

tcl>set si(eid) -1 
tcl>set si(core) 0 
tcl>set si(time) 0 
tcl>lappend si_list "$si" 
Error: can't read "si": variable is array 

答えて

9

私はいくつか試しましたが、それは失敗しました... )の値に:

set si(eid) -1 
set si(core) 0 
set si(time) 0 
lappend si_list [array get si] 

set mylist [list [dict create a 1 b 2] [dict create a 4 b 5]] 
puts [dict get [lindex $mylist 1] a] 

あなたは文字列に配列を変更するには、[配列GET]と[列セット]を使用する必要が配列としてそれを行うには

そして

array set newsi [lindex $si_list] 
puts $newsi(eid) 

dictsからそれを取り戻すためには、あなたが直接示しています{nameの値}に取り組んでみましょう。

+0

set si(eid) -1 set si(core) 0 set si(time) 0 lappend si_list "si" 

その後、あなたの配列を取り戻すためには、これを行いますユーザーは、dictのことを聞いていない...それに含まれる特別なlibが必要ですか? – OliveU

+0

特別なlibはありませんが、tcl8.5以降を実行する必要があります。 –

+0

バックポートから8.4 IIRC( 'dict'パッケージ)があります。 –

0

また、tcllibの::struct::recordパッケージをそのような目的で使用することもできます。

1

dictを含まないTclのバージョンでこれを行う1つの方法は、upv​​arを使うことです。これを行うには

、あなたのリストに配列変数の名前を追加します。申し訳ありませんが、私は新鮮なTCLだ

upvar #0 [lindex $si_list 0] newsi 
    puts $newsi(eid) 
+0

それぞれのelmentの名前がなければならないので、多くの要素を持つ大きなリストには適切でないかもしれないと思います...しかし、それは小さなリストでは大丈夫です。とにかくありがとう! – OliveU

+0

私が理解しているかどうかわからないのは、作成する各配列の名前がなければならず、配列の名前をリストに入れることだけです。あなたの質問でこれをどうしようとしていたのと違うのですか? – JonnyWizz

関連する問題