我有以下列表
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
没有给我任何输出,一旦找到匹配我应该怎么打破?
答案 0 :(得分:0)
最简单的方法可能是获取索引,如果值存在,则执行lindex
和break
:
foreach content $b {
set idx [lsearch $a $content]
if {$idx >= 0} {
set matching_value [lindex $a $idx]
break
}
}
我们使用索引,因为我们肯定确定搜索是否失败;我们在使用lsearch -inline
时没有保证一般,因为理论上列表中可能存在任何值。