4

Clojure初心者はこちら..

次のような一連のマップがある場合

 (def kids #{{:name "Noah" :age 5}
     {:name "George":age 3}
     {:name "Reagan" :age 1.5}})  

私はこのような名前を得ることができることを知っています

  (map :name kids)

1)特定のマップを選択するにはどうすればよいですか?たとえば、name="Reagan"のマップを取得したいとします。

 {:name "Reagan" :age 1.5}

これはフィルターを使用して実行できますか?

2)年齢= 3の名前を返すのはどうですか?

4

2 に答える 2

8

はい、あなたはそれを行うことができますfilter

(filter #(= (:name %) "Reagan") kids)

(filter #(= (:age %) 3) kids)
于 2012-08-18T18:52:09.583 に答える
6

ありますclojure.set/select

(clojure.set/select set-of-maps #(-> % :age (= 3)))

そして同様にname"Reagan"。この場合の戻り値はセットになります。

コレクション引数を呼び出すfilterので、特別な準備なしで使用することもできます(編集:これを入力しているときにffriendによってすでに説明されているように)filterseq

(filter #(-> % :age (= 3))) set-of-maps)

ここで、戻り値は遅延シーケンスになります。

セット内の述語を満たすアイテムが1つしかないことがわかっている場合は、someより効率的です(一致を見つけた後、追加の要素を処理しないため)。

(some #(if (-> % :age (= 3)) %) set-of-maps)

ここでの戻り値は、一致する要素になります。

于 2012-08-18T18:56:03.087 に答える