Clojure:找到通过谓词真相测试的集合中的第一个出现

时间:2016-01-30 14:24:16

标签: clojure functional-programming clojurescript

Clojure中的函数是否按照标题中描述的那样工作:

考虑这个载体:

(def v [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}])

我正试图抓住第一个条目,其中:b等于3。

用法如下:(这是JS下划线查找工作的方式)

(myfind #(= (:b %) 3) v)

2 个答案:

答案 0 :(得分:3)

天真的解决方案:

(first (filter #(= (:b %) 3) v))

惯用解决方案:

(some #(when (= (:b %) 3) %) v)

作为一项功能:

(defn myfind [pred coll]                                                                                                          
  (some #(when (pred %) %) coll))

(myfind #(= (:b %) 3) v) => {:b 3, :a 0}

答案 1 :(得分:1)

安东:

如果您想要返回匹配的整个地图或某个键的值,则没有具体说明。否则:

(filter #(= (:b %) 3)  [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}])
=> ({:a 0, :b 3})