3

ネストされたリストが条件に一致する場合、リストのリストから n 番目ごとの項目を取得する簡単な方法を探しています。したがって、このリストがある場合:

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

{1 3} を取得したい最初の項目として "a" を持つリスト内の 2 番目の項目をすべて探します。(リストはキーと値のペアなので、要するに、指定されたキーのすべての値が必要です)。

これは仕事をします:

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}}

どちらが好きかわかりません。(2 番目は少し長く、少しトリッキーですが、より良いバイトコードを生成します。 のバージョンlsearchは、どのバージョンでもバイトコード化されていません。)

于 2013-07-10T09:22:17.337 に答える