2011-07-15 24 views
3

我想创建一个列表,它的每个元素都是一个数组,类似于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 

回答

9

不能创建数组列表,但您可以创建类型的字典列表,它在功能上是相同的事情(从按键映射到值):

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值}工作直接列出。

+0

对不起,我是一个新的TCL用户,没有听说过字典......是否有任何特殊的lib需要包括在内? – OliveU

+0

没有特别的lib,但你需要运行tcl8.5或更新版本。 –

+0

有一个返回到8.4 IIRC('dict'包)的回传。 –

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) 
+0

我认为它可能不适合大型列表,因为每个元素都必须有一个名称,但它有很多元素......但是对小列表来说没关系。不管怎么说,还是要谢谢你! – OliveU

+0

我不确定我是否理解,必须为每个创建的数组创建一个名称,并且只需将该数组的名称放入列表中即可。这与你在你的问题中试图做什么不同? – JonnyWizz

相关问题