Можем ли мы создать список массивов и как? - PullRequest
3 голосов
/ 15 июля 2011

Я хочу создать список, и каждый его элемент является массивом, аналогично массиву структур на языке 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 ]

10 голосов
/ 15 июля 2011

Вы не можете создать список массивов, но вы можете создать список диктов, который функционально идентичен (отображение ключей на значения):

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 голос
/ 18 июля 2011

Один из способов сделать это в версиях Tcl, в которых нет dict, - использовать 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 голосов
/ 15 июля 2011

Вы также можете использовать пакет :: struct :: record из tcllib для чего-то подобного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...