TCL 访问数组 reference/name

TCL access array by reference/name

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

array set myarr {
    key_1 val_2
    key_2 val_2
}

set myvar myarr

我找不到如何从 myvar 遍历 myarr!

变量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,则可以使用 lsort-stride 选项来使用 array get 而不是 array names , 这样你就可以避免使用别名。但这是实现相同输出的另一种方式,只有在进行键排序数组迭代时才适用……)