2013-07-10 135 views
3

我正在尋找一個很好的簡短方法來獲取列表中的每個第n個項目,如果嵌套列表匹配條件。 所以,如果我有這樣的名單:TCL獲取每個列表中匹配列表中的第n個項目

set x [list [list a 1] [list b 2] [list a 3] [list b 4]] 

尋找具有列出了所有的第二項「a」作爲第一項 我想{1 3}。 (該列表是一個鍵值對,因此總之我需要指定鍵的所有值)。

該做的工作:

lsearch -all -index 1 -inline -subindices [lsearch -all -index 0 -inline $x a] * 

但是我正在尋找一種更簡潔更短的方式做到這一點。

謝謝!

回答

3

隨着8.5,我建議堅持你有什麼。與TCL 8.6,你可以使用lmap

lmap i $x {lassign $i k v; if {$k ne "a"} continue; set v} 
lmap i $x {if {[lindex $i 0] ne "a"} continue {lindex $i 1}} 

我不知道你喜歡哪一個。 (第二個稍微長一點,但有點複雜,但能生成更好的字節碼,lsearch的版本在任何版本中都沒有字節編碼。)

相關問題