【问题标题】:return list of arrays返回数组列表
【发布时间】:2011-08-03 22:58:19
【问题描述】:

TCL TK 与 list 和 array 的区别在哪里? 我创建了一个包含 3 个数组的列表。

循环喜欢这个

set x($idx) 1
incr idx

稍后我想返回“ret”对象

list set ret { $x $x2 $x3 }

并用

再次解析它们
lassign $data x x2 x3

但这行不通... :( 有人可以再次帮助我.. 该死的 tcl tk... :D:D

如果我不正确,请纠正我,它不可能建立一个 2dim 列表或数组?

【问题讨论】:

    标签: arrays list tcl tk


    【解决方案1】:

    您的数组称为 x - 您可以通过 set x(1)set x(2) 等引用它的元素。在这种情况下,$x2 和 $x3 没有任何意义。

    如果要二维数组,可以在TCL中模拟如下:

    set a(1,1) 0 ;# set element 1,1 to 0
    set a(1,2) 5 ;# set element 1,2 to 5
    

    如果您只使用列表列表可能会更容易

    set l1 [list a b c]
    set l2 [list d e f]
    set lol [list $l1 $l2]
    

    【讨论】:

    • 是否可以通过循环将元素添加到列表中?喜欢追加?
    • 是的,非常简单。例如使用 a对于 {set i 1} {$i
    【解决方案2】:

    您可以使用array get/set 将数组作为过程参数/返回值传递。例如:

    proc someProc {arr} {
      array set x $arr
      set x(5) 0
      return [array get x]
    }
    

    使用示例:

    % set a(0) -1
    % set a(1) 1
    
    % parray a
    a(0) = -1
    a(1) = 1
    
    % array set b [someProc [array get a]]
    
    % parray b
    b(0) = -1
    b(1) = 1
    b(5) = 0
    

    【讨论】:

    • 从 Tcl 8.5 开始,您可以将类似数组的值作为字典传递(通过 dict 命令进行操作)。 array get 命令生成一个字典,array set 命令消耗一个字典。
    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多