数组列表tcl

时间:2014-08-18 11:20:18

标签: arrays list 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
    }
}

输出为空......

出了什么问题?!

2 个答案:

答案 0 :(得分:1)

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?它为一个变量创建一个本地别名,这对于这类事情很有用。

答案 1 :(得分:0)

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

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
    }
}

基本上是一回事。

文档:dictforeachlistputsset