Clojure:在通过谓词真值测试的集合中查找第一个出现
Clojure中是否有如标题所述的功能: 考虑这个向量:Clojure:在通过谓词真值测试的集合中查找第一个出现,clojure,functional-programming,clojurescript,Clojure,Functional Programming,Clojurescript,Clojure中是否有如标题所述的功能: 考虑这个向量: (def v [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}]) 我在,试图抓住第一个条目,其中:b等于3 用法是这样的:这就是JS下划线find的工作原理 (myfind #(= (:b %) 3) v) 朴素的解决方案: (first (filter #(= (:b %) 3) v)) (some #(when (= (:b %) 3) %) v) 惯用解决方案: (first (filter #(=
(def v [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}])
我在,试图抓住第一个条目,其中:b等于3
用法是这样的:这就是JS下划线find的工作原理
(myfind #(= (:b %) 3) v)
朴素的解决方案:
(first (filter #(= (:b %) 3) v))
(some #(when (= (:b %) 3) %) v)
惯用解决方案:
(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}
朴素的解决方案:
(first (filter #(= (:b %) 3) v))
(some #(when (= (:b %) 3) %) v)
惯用解决方案:
(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}
安东:
您没有指定是否要返回与某个键匹配的整个映射或某个值。否则:
(filter #(= (:b %) 3) [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}])
=> ({:a 0, :b 3})
安东:
您没有指定是否要返回与某个键匹配的整个映射或某个值。否则:
(filter #(= (:b %) 3) [{:a 0 :b 1} {:a 0 :b 3} {:a 0 :b 2}])
=> ({:a 0, :b 3})
太好了,这就是我要找的。第二个更好,因为一旦有一个结果,它就会停止迭代。我不知道一些,只是一些?。非常感谢。第一个过滤器并没有什么低效的地方,因为它会被惰性地完成。i、 e.一旦发现第一个过程,该过程将立即停止。实际上,第一个过程效率低下;即创建一个惰性序列。有些只是重复出现。此外,仅仅为第一项创建一个惰性序列通常不是一个好主意。超级,这就是我想要的。第二个更好,因为一旦有一个结果,它就会停止迭代。我不知道一些,只是一些?。非常感谢。第一个过滤器并没有什么低效的地方,因为它会被惰性地完成。i、 e.一旦发现第一个过程,该过程将立即停止。实际上,第一个过程效率低下;即创建一个惰性序列。有些只是重复出现。此外,仅为第一项创建一个惰性序列通常不是一个好主意。