假设我有一个包含现有数组名称的常规变量。
array set myarr {
key_1 val_2
key_2 val_2
}
set myvar myarr
我无处可寻找如何从myvar迭代myarr!
答案 0 :(得分:2)
变量myvar
是一个简单的变量,它保存另一个变量的 名称 。您可以在任何您希望使用变量名称的位置使用对其的说明($
或set
):
foreach {key value} [array get $myvar] {
puts "$key => $value"
}
您可以直接执行的操作是使用该名称来访问阵列的内容。为此,您通常会使用upvar 0
将已命名的内容映射到您可以更轻松地使用的内容:
upvar 0 $myvar v
foreach key [lsort [array names v]] {
puts "$key => $v($key)"
}
(在这种情况下,如果您使用Tcl 8.6,则可以使用-stride
lsort
选项与array get
代替array names
,这可以让你避免使用别名。但这是实现相同输出的不同方法,并且仅适用于你进行密钥排序的数组迭代......)