数组名称中的串联

时间:2010-10-31 11:33:46

标签: tcl

我想在100个数组中存储100个节点的详细信息。 例如,

  

node 1的邻居应存储在array1

在此,对于每个数组,名称应更改为array1array2array3,...,array100

我需要使用for循环来连接数组和(1,2,3,...,100)。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

不完全确定你想要什么,但二维数组听起来像是要走的路

set a(1,1) neighbourof1_1;
set a(1,2) neighbourof1_2;
set a(2,1) neighbourof2_1;
...
...
set a(100,1) neighbourof100_1;

答案 1 :(得分:1)

通常建议使用2D数组(实际上只是复合元素名称),如下所示:

foreach x $listOf1to100 {
    foreach y $listOf1to100 {
        set ary($x,$y) "blah blah"
    }
}

但是,如果您真的想要创建这些名称,那么您可以通过多种方式进行创建。一个是这样的:

foreach x $listOf1to100 {
    set ary${x}(...) "blah blah"
}

但那很难看。当你来阅读阵列时,它甚至更加丑陋!更好的选择是:

foreach x $listOf1to100 {
    upvar 0 array$x a
    set a(...) "blah blah"
}

请注意,如果您真的正在使用2D紧凑数字索引,那么您可能更好地使用嵌套列表来构建矩阵:

# Create
set matrix [lrepeat 100 [lrepeat 100 "blah blah"]]
# Lookup
set value [lindex $matrix $x $y]
# Update
lset matrix $x $y $value