选择满足clojure中给定谓词的集合的第一项

时间:2013-12-04 15:26:18

标签: clojure

clojure中是否有一个函数(给定谓词和集合), 选择满足给定谓词的第一个项并停止迭代?

例如:

(select-first #(> % 10) (range))
=> 11

如果没有,也许有人可能会暗示我有关惯用的实现

2 个答案:

答案 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
相关问题