Как мне динамически создать список списков? - PullRequest
0 голосов
/ 30 апреля 2019

Я понимаю, что могу создать «список списков», как показано ниже, но я хотел бы создать «d» как часть процедуры (динамически добавлять $ x (x = a, b, c)).Может кто-нибудь помочь мне понять это?Я не верю, что Lappend работает с этим, поскольку он только добавляет элементы списка в существующий список.Так что это двумерный список.Мне понятно, как получить доступ к вложенным спискам после создания двухмерного списка.Есть мысли?

set a [list x y z]
set b [list u v w]
set c [list i j k]
set d [list $a $b $c] #I want to create this as a part of a procedure

foreach m $d {
    puts "++++++++++++"
    foreach n $m {
    puts $n
    }
}

sleepy> ./listOflist.tcl
+++++++
x
y
z
+++++++
u
v
w
+++++++
i
j
k
sleepy>

1 Ответ

0 голосов
/ 30 апреля 2019

В простейшем случае вы просто делаете:

proc 2D {m n} {
    set result {}
    set letter 96
    for {set i 0} {$i < $m} {incr i} {
        set row {}
        for {set j 0} {$j < $n} {incr j} {
            lappend row [format "%c" [incr letter]]
        }
        lappend result $row
    }
    return $result
}

Это нормально, но если вы хотите расширить одну из этих внутренних строк?lset!Позволяет поместить элемент после конца любого списка на любую глубину.

% set basic2Darray [2D 3 3]
{a b c} {d e f} {g h i}
% lset basic2Darray 0 end+1 x;     # <<< see the end+1?
{a b c x} {d e f} {g h i}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...