2017-04-20 55 views
1

匹配值我有以下列出搜索在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”我想与列表来搜索“一”,也如有匹配,那么找到我想要的价值。

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

考虑一个例子找到列表之间的匹配值“a”和列表“B”

foreach content $b { 
set matching_value [lsearch -inline $a $content] 
} 

并且如果发现匹配,该值应该返回,我不想与未来值进行比较如果有的话,在同一个列表中

puts $matching_value不给我任何输出,一旦找到匹配,我应该怎么休息?

+0

变量'a'中有6个元素。你想在列表'b'中搜索这个列表的每个元素吗? – Dinesh

+0

变量a在列表b中具有匹配元素aa。只有我需要搜索并返回该元素与其他变量分配的元素,说“matching_value”。 – Krishh

回答

0

最简单的方法可能是,如果该值存在抓取索引,并做了lindexbreak

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

我们使用索引,因为这时我们可以绝对确定搜索失败;我们没有保证一般当使用lsearch -inline时,因为理论上任何值都可能出现在列表中。

+0

非常感谢:) ..如果{$ idx == 0} – Krishh

+0

@Krishh:使用> =来代替查找不在第一个位置的项目,则在简单编辑后解决。 –

+0

@PeterLewerin:哦,是啊..谢谢.. – Krishh