2017-04-20 63 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