【问题标题】:How to implement two dimensional arrays in tcltcl如何实现二维数组
【发布时间】:2017-11-09 17:24:54
【问题描述】:

在创建二维数组时需要帮助。

我需要创建以下场景

nblist_0 = {1,2,3,4}
nblist_1 = {3,7,5,9,1}
nblist_2 = {7,4,9,2,5}
nblist_3 = {1,2,4,6}
nblist_4 = {1,5,4}
... 

由于我以后的逻辑遵循上述二维数组,我还需要访问单个数据的逻辑(就像数组一样)。请帮忙!!

【问题讨论】:

    标签: arrays tcl ns2


    【解决方案1】:

    有两种推荐的方式。一种是构造列表列表并使用lindexlset的多索引版本,另一种是构造组合键以与关联数组一起使用。

    嵌套列表

    # Setup...
    set nblist {
        {1 2 3 4}
        {3 7 5 9 1}
        {7 4 9 2 5}
        {1 2 4 6}
        {1 5 4}
    }
    
    # Reading...
    set row 1
    set column 3
    set value [lindex $nblist $row $column]
    
    # Writing...
    lset nblist $row $column [expr {$value + 17}]
    

    您可以使用 lappend 向表中添加新行,并且(在 Tcl 8.6 中)使用 lset nblist $rowidx end+1 $initval 将行扩展为一个元素

    foreach 的行或列的迭代是微不足道的。

    复合键

    # Setup...
    array set nblist {
        0,0 1 0,1 2 0,2 3 0,3 4
        1,0 3 1,1 7 1,2 5 1,3 9 1,4 1
        2,0 7 2,1 4 2,2 9 2,3 2 2,4 5
        3,0 1 3,1 2 3,2 4 3,3 6
        4,0 1 4,1 5 4,2 4
    }
    
    # Reading...
    set row 1
    set column 3
    set value $nblist($row,$column)
    
    # Writing...
    set nblist($row,$column) [expr {$value + 17}]
    

    使用这种方法,元素基本上是完全无序的,并且您的键基本上是字符串,但您可以相当简单地访问单个元素。但是,没有行或列的概念。对数组内容的迭代会很烦人。

    【讨论】:

    • 你也可以像使用数组一样使用字典。它们允许将结果表作为值传递(相比之下,关联数组是 variables 的集合,而不是 values 的集合),但不幸的是有更烦人的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2012-12-28
    • 2011-03-17
    • 1970-01-01
    相关资源
    最近更新 更多