Tcl 如何创建多维类散列结构

Tcl 如何创建多维类散列结构,tcl,Tcl,在TCL中创建和访问perl中存在的多维哈希的最佳方法是什么,例如: if{ $line = (\D+) ....} { $hash{name}=$1 $hash{height}=$2 } etc您可以像这样使用组合键(在最简单的情况下是最整洁的选项): 也可以将字典放入数组元素中: set x 1 set y 2 dict set d($x) $y 3 也可以使用嵌套字典: set x 1 set y 2 dict set d $x $y 3 它们之间的差异有一些微妙之处,但大多数时候大

在TCL中创建和访问perl中存在的多维哈希的最佳方法是什么,例如:

if{ $line = (\D+) ....} {
$hash{name}=$1
$hash{height}=$2
}

etc

您可以像这样使用组合键(在最简单的情况下是最整洁的选项):

也可以将字典放入数组元素中:

set x 1
set y 2
dict set d($x) $y 3
也可以使用嵌套字典:

set x 1
set y 2
dict set d $x $y 3
它们之间的差异有一些微妙之处,但大多数时候大多数人的代码并不真正关心,也不需要关心

这里是您最需要注意的情况。如果您正在执行第一个选项,并且无法保证原子键中可能包含哪些字符,您可以使用
列表
构建整体键(因为您知道如何应用引用规则以避免混淆):


当然,这会使访问变得更加尴尬,因为在生成键时需要使用
list
(或另一个列表生成命令)(或具有正确的字符串文字,这对于较大的键来说很烦人)。另外两个选项对于混淆任意键没有任何问题;字典并没有因为明确的设计目标而被混淆。

从技术上讲,Perl代码基本上类似于使用字典,只是Perl具有完全不同的值语义,所以根本不是这样…
set x 1
set y 2
dict set d $x $y 3
set x "the quick, cunning brown fox"
set y "the ever-so, ever-so lazy dog"
set d([list $x $y]) "jumps over"