使用tcl很难处理多维度列表

时间:2014-10-15 09:26:31

标签: multidimensional-array tcl tk

我需要用tcl处理一些复杂的数据。我需要3维列表来存储数据, 但我发现tcl对这项工作不利。

根据我目前的研究,tcl不支持列表的简单索引,如:listname(index)。

因此对于多维度列表,如果我想为某个元素分配新值,那将是非常麻烦的。

是否有一些有效处理数据的技能?

2 个答案:

答案 0 :(得分:2)

多维数组的最有效表示是嵌套列表(除非您要使用稀疏数组)。为此,您可以lrepeat进行创建,使用多索引lindex进行阅读,使用lset进行撰写。

# Create a 5x5x5 structure, filled with float zeroes
set example [lrepeat 5 [lrepeat 5 [lrepeat 5 0.0]]]
# Index into the structure
set value [lindex $example 1 2 3]
# Write a value back into the structure
lset example 1 2 3 [expr {$value + 8.75}]

该实现对列表(包括嵌套列表)使用高效的写时复制方案,以便在可能的情况下节省空间,并在必要时尽量减少重复,以便保持错觉,即使用积极的复制它是纯粹的值。除了更快......

当然,如果你这么做的话,最好还是看看VecTcl

答案 1 :(得分:0)

如果你想要listname(索引),你也可以尝试使用数组。多维数组很简单,因为您可以根据需要简单地设置索引:

set example(1,2,3) $value
set value $example(1,2,3)

我不知道哪个更有效,数组,列表如Donal的例子或字典:

dict set example 1 2 3 $value
set value [dict get $example 1 2 3]