就像标题说的那样,我正在 Clojure 中寻找一个函数,它返回地图中第一个元素的索引以满足条件,我知道该怎么做,但是如果 API 中已经有一些东西我想要给我们吧。
例子:
(strange-fn #(even? %) '(1 3 5 7 9 4))
=> 5
就像标题说的那样,我正在 Clojure 中寻找一个函数,它返回地图中第一个元素的索引以满足条件,我知道该怎么做,但是如果 API 中已经有一些东西我想要给我们吧。
例子:
(strange-fn #(even? %) '(1 3 5 7 9 4))
=> 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
这很容易做到,但请注意,大多数情况下,如果您正在编写使用事物索引(尤其是惰性序列)的代码,通常只需使用序列就可以更整齐地完成整个事情。但是,如果您确定要处理索引,那么它就像(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll)))
.