TCL:嵌套关联数组

TCL: Nested Associative Arrays

是否可以在 Tcl 中进行嵌套关联数组?我知道我可以在 tcl8.5 或更高版本中使用 'dict',但我的代码需要在 tcl8.4 中使用 运行。

我想这样做:

array set A {}
array set tmp {...}
array set tmp1 {...}
array set A($foo) tmp
array set A($foo1) tmp1

所以 foo/foo1 是键,它们的值是关联数组。在 python 中,这就像一个字典中的字典。

我正在尝试上面的方法,但 tcl 抱怨 A($foo)/A($foo1) 不是数组。

Tcl 的数组不能 嵌套(除了在非常旧的 Tcl 版本中,其中存在允许您这样做的错误)。您通常可以使用复合键,例如 a,b,c(或 $a,$b,$c)来实现类似的效果,但这实际上只是利用了键是 通用字符串 这一事实而不是数字或简单的单词。

set A(123,$xyz) "the quick brown $fox"
set B($pqr,456) "the lazy dogs"

除此之外,你不能真正将对变量的引用放在变量中。你必须做一些额外的修改:

foreach {key value} [array get tmp1] {
    set A($foo,$key) $value
}

Tcl 8.5 的字典(其中映射是一个值,而不是变量集合)确实是您想要做的事情的更好解决方案,特别是因为 8.4 现在已经完全停产了(而且我知道其中有一些无法修复的非常讨厌的错误)。我认为有一个 dict 包实现了 8.4 功能的部分向后移植,但我对此并不完全确定,因为我没有进行打包并且当时已经转移到 8.5;它不会被维护…