数组列表tcl



我有5个数组,我想逐个迭代它们,所以我在考虑将这些数组添加到另一个数组并逐个访问它们的索引

array set ListOfArrays {1 $array1 2 $array2 3 $array3 4 $array4 5 $array5}
for { set i 1} { $i <= 5 } {incr i} {
    set list $ListOfArrays($i)
    foreach {key} [array names list] {
        puts $key
    }
}

输出为空…

怎么了?!

Tcl的数组不能放在列表中;它们是变量的(集合),而不是值。但是您可以将数组的名称放在。

中。
array set ListOfArrays {1 array1 2 array2 3 array3 4 array4 5 array5}
for { set i 1} { $i <= 5 } {incr i} {
    upvar 0 $ListOfArrays($i) list
    foreach {key} [array names list] {
        puts $key
    }
}

upvar 0 ?它为变量创建了一个本地别名,这对于这类事情非常有用。

作为基于array的解决方案的替代方案,使用字典的解决方案。我从Jerry的回答中借用了数据。

set dict1 {1 a 2 b}
set dict2 {3 c 4 d}
set dict3 {5 e 6 f}
set dict4 {7 g 8 h}
set dict5 {9 i 10 j}
set dicts [list $dict1 $dict2 $dict3 $dict4 $dict5]
foreach dict $dicts {
    foreach key [dict keys $dict] {
        puts $key
    }
}

与数组不同,字典可以作为值传递并使用$求值。这意味着您可以将五个字典放在一个列表中,并用foreach遍历该列表。在内部循环中,打印每个键。

foreach dict $dicts {
    dict for {key -} $dict {
        puts $key
    }
}

基本相同。

文档:dict, foreach, list, puts, set

最新更新