如何动态创建列表列表?

时间:2019-04-30 14:17:33

标签: list tcl

我知道我可以创建一个“列表列表”,如下所示,但是我想在过程的一部分中创建“ 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 :(得分:0)

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

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}