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

发布于 2024-11-19 22:26:40 字数 259 浏览 3 评论 0原文

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

I want to create a list and each element of it is an array, similarly to an array of structs in C language.
Can it be done in TCL and how if it can? thanks very much!

I did some try but it failed...

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

追星践月 2024-11-26 22:26:40

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

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)

字典可让您直接处理 {name value} 列表。

You can't create a list of arrays, but you can create a list of dicts which is functionally the same thing (a mapping from keys to values):

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

To do it as arrays you need to use [array get] and [array set] to change the array into a string:

set si(eid) -1
set si(core) 0
set si(time) 0
lappend si_list [array get si]

And to get it back out

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

dicts let you work on the {name value} lists directly.

筱武穆 2024-11-26 22:26:40

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

One way to do this on versions of Tcl that don't include dict is to use upvar.

To do this, add the names of the array variables to your list:

    set si(eid) -1
    set si(core) 0
    set si(time) 0
    lappend si_list "si"

Then to get your array back, do this:

    upvar #0 [lindex $si_list 0] newsi
    puts $newsi(eid)
欢你一世 2024-11-26 22:26:40

您还可以使用 tcllib 中的 ::struct::record 包来实现类似的功能。

You could also use the ::struct::record package from tcllib for something like that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文