考虑一下我在Tcl代码中有两个列表:
a : { 1 2 3 4 5}
b : {p q r s t}
现在,我需要检查列表a中超过3的元素的索引,并在列表b中打印那些相同索引的元素。例如,在列表a中,索引3处的元素是4,因此我的代码应该返回列表b的索引3处的元素,即4.让我们假设a和b总是具有相等数量的元素。
如果包含少量元素,我可以使用lindex命令访问每个元素,然后使用if-else梯形图获取所有情况的所需输出,但是对于a中的大量元素,此方法不会适用。我该怎么做?
答案 0 :(得分:0)
诀窍是使用双列表foreach
:
set results {}
foreach a_elem $a b_elem $b {
if {$a_elem > 3} {
lappend results $b_elem
}
}
# Result is now in $results
您可以使用8.6中的lmap
更简洁地执行此操作:
set results [lmap a_elem $a b_elem $b {
if {$a_elem > 3} {string cat $b_elem} else continue
}]
continue
对lmap
很重要,因为它会跳过该次迭代的值。