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
, 这样你就可以避免使用别名。但这是实现相同输出的另一种方式,只有在进行键排序数组迭代时才适用……)
假设我有一个包含现有数组名称的常规变量。
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
, 这样你就可以避免使用别名。但这是实现相同输出的另一种方式,只有在进行键排序数组迭代时才适用……)