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

时间:2013-07-10 05:42:24

标签: 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] *

但我正在寻找更简洁的方法来做到这一点。

谢谢!

1 个答案:

答案 0 :(得分: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的版本在任何版本中都不是字节码。)