如何在Tcl中检索数组键值

时间:2013-12-05 20:20:26

标签: arrays 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)
}

现在这个$ 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,恰好就是这种情况。

尽快需要解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:1)

听起来你需要$color([lindex $newlist $i])

答案 1 :(得分:1)

在列表中进行迭代时,foreach命令很有用。它还可以用于迭代多个相应的列表。假设newlist保持与点对应的颜色,我可能会尝试类似(通常关于未经测试的代码的警告):

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