tcl列表操作lsearch

Augusdi發表於2015-05-07


名稱   lsearch - 在列表中尋找特定元素

語法   lsearch ?options? list pattern

描述 這個命令尋找list中與pattern匹配的元素。如果匹配到了返回第一次找到這個元素的索引(除非指定了-all或-inline),如果沒有匹配到返回-1。可選變元指出了列表的元素怎樣去匹配pattern,可選項如下:

匹配風格可選項

預設的匹配風格為-glob,如果給出了多個匹配風格,那麼最後給出的匹配風格有效。

-exact
pattern是字串並且必須嚴格匹配每一個list元素。
-glob
pattern是通配風格匹配每一個列表元素,與string match命令類似。
-regexp
pattern被當作一個正規表示式來匹配列表中的每一個元素,與re_syntax命令類似。
-sorted
列表元素被排序,如果指定了這個可選項,lsearch將會使用更加有效的查詢演算法去查列表。如果沒有指定其它的可選項,list將被排列成升序並且包含ASCII碼。這個可選項與-glob-regexp互斥,當指定了-all-not時與-exact非常象。

一般修飾可選項

這些可選項可以在任何一種匹配風格中給出。

-all
返回一個列表,列表的元素為所有匹配到的索引,返回的索引按照數字順序排列,如果同時指定了-inline返回數值,數值的順序就是在列表中的順序。
-inline
返回匹配到的第一個元素。如果-all也指定了,則返回一個列表,列表的元素為所有匹配到的數值。
-not
與匹配相反,返回第一個不匹配的數值的索引。
-start index
從列表的index個索引開始搜尋。

內容描述可選項

描述如何去解釋在列表中尋找到的元素,只有當-exact-sorted指定時才有效。如果給出了多個可選項,那麼最後給出的可選項有效。預設為-ascii。

-ascii
列表元素作為Unicode字串來檢查。
-dictionary
列表元素在比較時使用字典關係(檢視lsort以獲取詳細描述),只有當-sorted可選項指定時才有有效。
-integer
列表中的元素被當作整數來處理。
-nocase
忽略大小寫。與-dictionary-integer-real搭配無效。
-real
列表中的元素被當作浮點數來處理。

列表排序可選項

這個可選項指定了列表如何排序,只有指定了-sorted時才有效。如果給出了多個可選項,那麼最後給出的可選項有效。

-decreasing
列表元素為降序排列,只有指定了-sorted時才有效。
-increasing
列表元素為升序排列,只有指定了-sorted時才有效。

內嵌列表可選項

這些可選項被用來尋找子列表,可以與任何其它可選項一起使用。

-index indexList
這個可選項尋找內嵌的列表,indexList變元必須給出一個索引列表(與lindexlset類似),indexList給出的索引列表在list中必須存在對應的索引,否則會出錯。
-subindices
這個可選項只返回尋找到的子列表元素,必須和-index配合使用。

示例

基本搜尋:

lsearch {a b c d e} c 
  2 
lsearch -all {a b c a b c} c 
  2 5  

過濾列表:

lsearch -inline {a20 b35 c47} b* 
  b35 
lsearch -inline -not {a20 b35 c47} b* 
  a20 
lsearch -all -inline -not {a20 b35 c47} b* 
  a20 c47 
lsearch -all -not {a20 b35 c47} b* 
  0 2  

甚至可以做切除操作:

lsearch -all -inline -not -exact {a b c a d e a f g a} a 
  b c d e f g  

搜尋從半途開始:

lsearch -start 3 {a b c a b c} c 
  5  

搜尋子列表中的元素:

lsearch -index 1 -all -inline {{a abc} {b bcd} {c cde}} *bc* 
  {a abc} {b bcd}  
 
 
轉自:http://blog.csdn.net/dulixin/article/details/2185458 

相關文章