我想创建一个列表,它的每个元素都是一个数组,类似于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
答案 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包来做类似的事情。