给定数据
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)
}
现在这个$ color($ keylist)没有给我正确的结果和错误说: 无法读取“颜色(红蓝绿)”:数组中没有这样的元素
相反,我希望第一组4个点获得绿色,这是b的值。同样,从pointlist下一组4点也应该变为绿色,因为它的值也是b。
#So, after substitution it should look like APIcommand -points 1,2,3,4 -color green ..... so on and so forth
请注意,这并不总是b,恰好就是这种情况。
尽快需要解决方案。提前谢谢。
答案 0 :(得分:1)
听起来你需要$color([lindex $newlist $i])
答案 1 :(得分:1)
在列表中进行迭代时,foreach
命令很有用。它还可以用于迭代多个相应的列表。假设newlist
保持与点对应的颜色,我可能会尝试类似(通常关于未经测试的代码的警告):
foreach point $pointlist new $newlist {
APICommand -points [join $point ,] -color $color($new)
}