我需要用tcl处理一些复杂的数据。我需要3维列表来存储数据, 但我发现tcl对这项工作不利。
根据我目前的研究,tcl不支持列表的简单索引,如:listname(index)。
因此对于多维度列表,如果我想为某个元素分配新值,那将是非常麻烦的。
是否有一些有效处理数据的技能?
答案 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]