如何动态创建列表列表?

How do I dynamically create a list of lists?

我知道我可以创建一个 "list of lists" 如下所示,但我想创建 "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>

在最简单的情况下,您只需执行:

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}