我有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
}
}
输出为空......
出了什么问题?!
答案 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
}
}
基本上是一回事。