我有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