Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:在通过谓词真值测试的集合中查找第一个出现_Clojure_Functional Programming_Clojurescript - Fatal编程技术网

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 #(=

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 #(= (: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.一旦发现第一个过程,该过程将立即停止。实际上,第一个过程效率低下;即创建一个惰性序列。有些只是重复出现。此外,仅为第一项创建一个惰性序列通常不是一个好主意。