我们可以创建一个数组列表以及如何?

时间:2011-07-15 03:32:35

标签: 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

3 个答案:

答案 0 :(得分:10)

你不能创建一个数组列表,但你可以创建一个功能上相同的dicts列表(从键到值的映射):

set mylist [list [dict create a 1 b 2] [dict create a 4 b 5]]
puts [dict get [lindex $mylist 1] a]

要将数组作为数组,需要使用[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)

dicts让您直接处理{name value}列表。

答案 1 :(得分:1)

在不包含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)

答案 2 :(得分:0)

你也可以使用tcllib的::struct::record包来做类似的事情。