2013-12-05 3 views
0

Учитывая данныеКак восстановить ключевые значения массива в Tcl

array set color {a red b green c blue} 
set keylist [array names $color] 
pointlist {{1 2 3 4} {5 6 7 8} {9 10 11 12} {13 14 15 16}} 

получить новый список после выполнения процедуры.

newlist {b b b b}  # Note: length of newlist is same as length of pointlist 

Вопрос: когда я запускаю цикл, эти значения b должны быть заменены, например, зеленым цветом.

for {set i 0} { $i < [llength $pointlist]} {incr i } { 
    lassign [lindex $pointlist $i] x1 y1 x2 y2 
    APICommand -points "$x1,$y1,$x2,$y2" -color $color($keylist) 
} 

Теперь это $ цвет ($ KeyList) не доходят мне правильный результат и ошибки, говоря: не умеет читать «цвет (красный синий зеленый)»: нет такого элемента в массиве

Вместо Я хочу, чтобы первый набор из 4 очков получил зеленый цвет, который является значением b. Аналогично, следующий набор из 4 пунктов из списка должен также стать зеленым, так как его значение также равно b.

#So, after substitution it should look like APIcommand -points 1,2,3,4 -color green ..... so on and so forth 

Обратите внимание, что это не всегда будет b, это просто происходит в этом случае.

Нужно решение как можно скорее. Заранее спасибо.

ответ

1

Похоже, что вам нужно $color([lindex $newlist $i])

+0

Я пытался использовать цикл Еогеаспа внутри для цикла, а затем использовать -цвет [LINDEX $ color ($ newlist) $ i], и именно поэтому это дало мне ошибку. но сначала используя имя массива, а затем индекс keylist решил мою проблему. Еще раз спасибо !! (Это именно то, что я искал) – user2643899

1

Когда итерация по списку, команда foreach полезна. Его также можно использовать для перебора нескольких списков. Предполагая newlist трюмы цвета, которые соответствуют точкам, я мог бы попробовать что-то вроде (обычные предупреждения о непроверенной коде):

foreach point $pointlist new $newlist { 
    APICommand -points [join $point ,] -color $color($new) 
} 
+0

Нам не нужно вычислять точку foreach, мы должны сделать это для группы из 4 баллов. означает, что 4 точки соответствуют одному цвету – user2643899

Смежные вопросы