返回满足条件的映射中第一个元素的索引的函数

And*_*osa 2 functional-programming clojure

就像标题所说的那样,我正在寻找Clojure中的一个函数,它返回一个映射中第一个元素的索引以满足条件,我知道该怎么做,但是如果API中已有的东西我想要给我们.

例:

(strange-fn #(even? %) '(1 3 5 7 9 4)) 
=> 5
Run Code Online (Sandbox Code Playgroud)

Joh*_*hnJ 5

您在示例中提供了列表而不是地图,因此我假设您的意思是任何序列.

一种简单的方法是只count返回从take-while以下位置返回的项目数:

(defn strange-fn [f coll]
  (count (take-while (complement f) coll)))

(strange-fn #(even? %) '(1 3 5 7 9 4))
;=> 5
Run Code Online (Sandbox Code Playgroud)


ama*_*loy 5

这很容易做到,但要注意大多数情况下,如果你编写的代码适用于事物索引(特别是lazy-seqs),通常只需要处理序列就可以更加整洁.但是,如果您确定要处理指数,那就很简单了(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll))).