我想创建一个列表,它的每个元素都是一个数组,类似于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
我想创建一个列表,它的每个元素都是一个数组,类似于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
不能创建数组列表,但您可以创建类型的字典列表,它在功能上是相同的事情(从按键映射到值):
set mylist [list [dict create a 1 b 2] [dict create a 4 b 5]]
puts [dict get [lindex $mylist 1] a]
要做到这一点的数组,你需要使用[阵列GET]和[阵列设置]数组改变为一个字符串:
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)
类型的字典让您在{name值}工作直接列出。
你也可以使用tcllib的::struct::record包来做类似的事情。
在不包含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用户,没有听说过字典......是否有任何特殊的lib需要包括在内? – OliveU
没有特别的lib,但你需要运行tcl8.5或更新版本。 –
有一个返回到8.4 IIRC('dict'包)的回传。 –