TCL从列表列表中匹配的每个列表中获取第n项

TCL从列表列表中匹配的每个列表中获取第n项,tcl,Tcl,我正在寻找一种很好的方法,如果嵌套列表符合条件,就可以从列表列表中获取每n个项目。 因此,如果我有以下清单: set x [list [list a 1] [list b 2] [list a 3] [list b 4]] 查找列表中第一项为“a”的所有第二项 我想得到{13}。 (列表是一个键值对,因此简而言之,我需要指定键的所有值) 这就是工作: lsearch -all -index 1 -inline -subindices [lsearch -all -index 0 -inline

我正在寻找一种很好的方法,如果嵌套列表符合条件,就可以从列表列表中获取每n个项目。 因此,如果我有以下清单:

set x [list [list a 1] [list b 2] [list a 3] [list b 4]]
查找列表中第一项为“a”的所有第二项 我想得到{13}。 (列表是一个键值对,因此简而言之,我需要指定键的所有值)

这就是工作:

lsearch -all -index 1 -inline -subindices [lsearch -all -index 0 -inline $x a] *
但我正在寻找一种更简洁的方法来实现这一点


谢谢

对于8.5,我建议你还是坚持现有的。使用Tcl 8.6,您可以使用
lmap

lmap i $x {lassign $i k v; if {$k ne "a"} continue; set v}
我不确定你喜欢哪一个。(第二个版本稍长一些,也有点复杂,但生成的字节码更好。任何版本中都没有使用
lsearch
的字节码。)

lmap i $x {if {[lindex $i 0] ne "a"} continue {lindex $i 1}}