TCL访问数组按引用/名称

时间:2015-05-22 15:34:19

标签: arrays reference tcl

假设我有一个包含现有数组名称的常规变量。

array set myarr {
    key_1 val_2
    key_2 val_2
}

set myvar myarr

我无处可寻找如何从myvar迭代myarr!

1 个答案:

答案 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 ,这可以让你避免使用别名。但这是实现相同输出的不同方法,并且仅适用于你进行密钥排序的数组迭代......)