arrays - 如何在tcl中实现二维数组

标签 arrays tcl ns2

需要创建二维数组方面的帮助。

我需要创建以下场景

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}
... 

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

最佳答案

有两种推荐的方法。一种是构造列表的列表并使用 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}]

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

关于arrays - 如何在tcl中实现二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44428213/

相关文章:

javascript - 获取数组作为原始命令行参数

arrays - 对数组进行排序,使元素 a[i]-a[i+1]<=a[i+1]-a[i+2] 的差值

tcl - 读取tcl中的缓冲流

c++ - 存在调试符号,但 eclipse 没有将它们与源代码相关联

java - 使用 for 循环在字符串数组中打印索引号和该索引中的字符

javascript - 使用与 javascript 关联的数组进行搜索?

variables - 如何在不使用$(美元)符号的情况下访问变量

tcl - .tbc 到 .tcl 文件

linux - 无法在 Fedora 19 上保存对 Makefile 的更改