Я не полностью понял вопрос, но из того, что я понял, вам нужно создать список списков, с большим списком, содержащим 20 меньших списков. Вы можете использовать что-то вроде этого:
set allClusters [list]
set subClusters [list]
for {set i 0} {$i < 20} {incr i} {
lappend subClusters [list]
}
lappend allClusters $subClusters
puts $allClusters
# {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}}
$allClusters
- это список из 20 небольших списков.
Если затем вы хотите установить значение для меньшего списка по индексу 2, сначала нужно извлечь меньший список, затем lappend
, а затем вернуть его обратно:
set subCluster [lindex $allClusters 0 2]
lappend subCluster "test"
lset allClusters 0 2 $subCluster
Вы можете создать proc
для выполнения вышеприведенного:
proc deepLappend {clusterName indices value} {
upvar $clusterName cluster
set subCluster [lindex $cluster {*}$indices]
lappend subCluster $value
lset cluster {*}$indices $subCluster
}
deepLappend allClusters {0 2} "test"
deepLappend allClusters {0 2} "test"
puts $allClusters
# {{} {} {test test} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}}
Хотя, если вы создаете набор пустых списков, вы можете попробовать использовать lrepeat
:
set allClusters [list [lrepeat 20 [list]]]
# {{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}}