1

私はTclが初めてです。リスト内の要素値を別のリストへのキーとして使用したいと考えています。だから私が持っている場合:

set  mainlist  { list1 list2 }  
set  list1 { val1 val2 }
set  list1 { val3 val4 }

list1 と list2 のメンバーを取得するために、メインリストのメンバーを繰り返し処理したいと思います。

私は次のことを試しましたが、うまくいきませんでした:

for {set i 0} {$i < [llength $list1]} {incr i}  {

  set  mem  [lindex $list1 $i] 

  for {set j 0} {$j < [llength $mem]} {incr j} {

     puts [lindex $mem $j]

   }
}

解決策はありますか?

4

3 に答える 3

2

さて、間接変数アクセス。これに使用setします。

あなたのコードは次のようになります:

set  mainlist  { list1 list2 }  
set  list1 { val1 val2 }
set  list2 { val3 val4 }

foreach mem $mainlist {
    foreach val [set $mem] {
        puts $val
    }
}

ネストされたリストを使用しないのはなぜですか?

編集:値またはそれぞれを持つ を
使用します。ただし、変数のコンテンツにアクセスしようとするため、またはを使用する必要があります。$memlist1list2list1set varnameset $variable_with__varname

foreachより速いだけでなく、あなたの意図がより明確になります。
詳細については、tcl.tk wikiを参照してください。

于 2013-08-20T08:36:40.513 に答える
1

あなたが何を求めているのかよくわかりませんが、あなたが行ったループから、次のようなことをしたいようです:

set list1 {key1 value1}
set list2 {key2 value2}
set mainlist [list $list1 $list2]

変数をリストに入れる前に変数を設定する必要があることに注意してください。

ここで、 key を持っている場合key2、 value を取得するためにvalue2、少し異なる方法で作成したループを使用できます。

set key "key2"
foreach i $mainlist {
    if {[lindex $i 0] == $key} {
         puts [lindex $i 1]
    }
}
于 2013-08-20T08:55:08.363 に答える