3

如果嵌套列表与条件匹配,我正在寻找一种很好的简短方法来从列表列表中获取每个第 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] *

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

谢谢!

4

1 回答 1

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在任何版本中都没有字节码。)

于 2013-07-10T09:22:17.337 回答