TCL foreach正在为我的索引添加引号

时间:2017-02-25 22:56:18

标签: arrays foreach tcl

我正在创建一个数组并循环遍历数组,但由于某种原因,foreach命令正在为索引添加引号。

我有以下代码来初始化数组:

# Fill the region array for the 8 regions.
set regionBBox(SDQ1) "11262.000 1558.700 15489.000 1663.000"
set regionBBox(SDQ2) "6910.000 1558.700 11137.000 1663.000"
set regionBBox(SDQ3) "1550.000 7929.260 1665.000 12159.000"
set regionBBox(SDQ4) "1550.000 12283.820 1665.000 16511.000"
set regionBBox(SDQ5) "6654.000 21241.580 11393.000 21352.000"
set regionBBox(SDQ6) "11518.000 21241.580 16257.000 21352.000"
set regionBBox(SDQ7) "21246.000 11773.100 21354.005 15999.000"
set regionBBox(SDQ8) "21246.000 7418.540 21354.000 11647.000"

当我得到整个列表时,没有引号:

lsort [array names regionBBox]

结果:

SDQ1 SDQ2 SDQ3 SDQ4 SDQ5 SDQ6 SDQ7 SDQ8

但是当我遍历数组时,每个$ id的值都包含双引号。

foreach $id [lsort [array names regionBBox]] {
  echo "Index = $id"
  set bbox $regionBBox($id)
}

结果:

Index = "SDQ6"
Error: can't read "regionBBox("SDQ6")": no such element in array

为什么foreach会添加引号?如何避免添加引号?

1 个答案:

答案 0 :(得分:2)

这是一个愚蠢的菜鸟错误:我在foreach中有“$ id”,我应该只有“id”。这是固定代码:

foreach id [lsort [array names regionBBox]] {
  echo "Index = $id"
  set bbox $regionBBox($id)
}

结果是:

Index = SDQ1
Index = SDQ2
Index = SDQ3
Index = SDQ4
Index = SDQ5
Index = SDQ6
Index = SDQ7
Index = SDQ8