Tcl 我们可以创建数组列表吗?如何创建?

Tcl 我们可以创建数组列表吗?如何创建?,tcl,Tcl,我想创建一个列表,其中的每个元素都是一个数组,类似于C语言中的结构数组。 TCL可以做到吗?如果可以,怎么做?非常感谢 我做了一些尝试,但失败了 tcl>set si(eid) -1 tcl>set si(core) 0 tcl>set si(time) 0 tcl>lappend si_list "$si" Error: can't read "si": variable is array 您不能创建数组列表,但可以创建功能相同的dict列表(从键到值的映射): 要作

我想创建一个列表,其中的每个元素都是一个数组,类似于C语言中的结构数组。
TCL可以做到吗?如果可以,怎么做?非常感谢

我做了一些尝试,但失败了

tcl>set si(eid) -1
tcl>set si(core) 0
tcl>set si(time) 0
tcl>lappend si_list "$si"
Error: can't read "si": variable is array

您不能创建数组列表,但可以创建功能相同的dict列表(从键到值的映射):

要作为数组执行此操作,需要使用[array get]和[array set]将数组更改为字符串:

set si(eid) -1
set si(core) 0
set si(time) 0
lappend si_list [array get si]
然后把它拿出来

array set newsi [lindex $si_list]
puts $newsi(eid)

dict允许您直接处理{name-value}列表。

您也可以使用tcllib中的包进行类似操作。

在不包含dict的Tcl版本上执行此操作的一种方法是使用upvar

为此,请将数组变量的名称添加到列表中:

    set si(eid) -1
    set si(core) 0
    set si(time) 0
    lappend si_list "si"
然后,要恢复阵列,请执行以下操作:

    upvar #0 [lindex $si_list 0] newsi
    puts $newsi(eid)

对不起,我是tcl的新用户,没有听说过dict。。。是否需要为其包含任何特殊库?没有特殊库,但您确实需要运行tcl8.5或更高版本。8.4 IIRC(dict
dict
package)有一个后端口。我认为它可能不适合包含大量元素的大型列表,因为每个元素都必须有一个名称……但对于小型列表来说也可以。无论如何谢谢你!我不确定我是否理解,创建的每个数组都必须有一个名称,而您只是将数组的名称放入列表中。这与你在问题中试图做的有什么不同?
    upvar #0 [lindex $si_list 0] newsi
    puts $newsi(eid)