clojure中是否有一个函数(给定谓词和集合), 选择满足给定谓词的第一个项并停止迭代?
例如:
(select-first #(> % 10) (range))
=> 11
如果没有,也许有人可能会暗示我有关惯用的实现
答案 0 :(得分:34)
有多种可能性。
<强> some
强>
some
返回其谓词返回的第一个非零值。
(some #(when (> % 10) %) (range)) ;; => 11
filter
+ first
filter
保留与谓词匹配的元素,first
检索其中的第一个元素。
(first (filter #(> % 10) (range))) ;; => 11
remove
+ first
如果你想找到第一个不匹配你的谓词的元素,remove
就是你的朋友:
(first (remove #(<= % 10) (range))) ;; => 11
或some
:
(some #(when-not (<= % 10) %) (range)) ;; => 11
所以,就是这样,我想。
答案 1 :(得分:8)
使用过滤器和第一个
user=> (->> (range) (filter #(> % 10)) first)
11
user=> (first (filter #(> % 10) (range)))
11