在tcl中搜索匹配的值

时间:2017-04-20 09:44:46

标签: tcl

我有以下列表

set a [list aa ab abc1 120 2ab 00]
set b [list aa bb dd]
set c [list ab bc cd]
set d [list abc0 abc1 abc2]
set e [list 110 040 120]
set f [list 1ab 2ab 3ab 4ab]
set g [list 00 11 22]

从列表“b”到列表“g”我想用列表“a”搜索,如果发现任何匹配,那么我想要那个值。

-inline将给出完全匹配但对于单个元素。对于多个值,我写了下面的代码,但它没有在终端上给我输出。

考虑一个例子来查找列表“a”和列表“b”

之间的匹配值
foreach content $b {
set matching_value [lsearch -inline $a $content]
}

并且如果找到匹配,则应返回该值,并且我不想与同一列表中的下一个值进行比较(如果有)。

puts $matching_value没有给我任何输出,一旦找到匹配我应该怎么打破?

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是获取索引,如果值存在,则执行lindexbreak

foreach content $b {
    set idx [lsearch $a $content]
    if {$idx >= 0} {
        set matching_value [lindex $a $idx]
        break
    }
}

我们使用索引,因为我们肯定确定搜索是否失败;我们在使用lsearch -inline时没有保证一般,因为理论上列表中可能存在任何值。