从给定条件的特定索引处的Tcl中的列表中获取元素

时间:2018-01-23 05:10:26

标签: tcl

考虑一下我在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中的大量元素,此方法不会适用。我该怎么做?

1 个答案:

答案 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
}]

continuelmap很重要,因为它会跳过该次迭代的值。