конкатенация в именах массивов - PullRequest
0 голосов
/ 31 октября 2010

Я хочу хранить детали 100 узлов в 100 массивах.Например,

Соседи node 1 должны храниться в array1

. При этом имена для каждого массива должны изменяться как array1, array2, array3, ..., array100

Мне нужна конкатенация для массива и (1, 2, 3, ..., 100) с использованием цикла for.

Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 31 октября 2010

Не совсем уверен, что вы хотите, но двумерный массив звучит как путь

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 голос
/ 02 ноября 2010

Обычно рекомендуется использовать двумерные массивы (на самом деле просто имена составных элементов), например:

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

Имейте в виду, что если вы действительно работаете с двумерными компактными числовыми индексами, то, возможно, лучше использовать вложенные списки для построения матрицы:

# Create
set matrix [lrepeat 100 [lrepeat 100 "blah blah"]]
# Lookup
set value [lindex $matrix $x $y]
# Update
lset matrix $x $y $value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...