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

时间:2012-11-09 23:33:21

标签: clojure functional-programming

就像标题所说的那样,我正在Clojure中寻找一个函数,它返回地图中第一个元素的索引以满足条件,我知道如何做,但是如果API中已有的东西可用我想对我们说。

示例:

(strange-fn #(even? %) '(1 3 5 7 9 4)) 
=> 5

2 个答案:

答案 0 :(得分:5)

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

一种简单的方法是仅counttake-while返回的项目数量:

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

(strange-fn #(even? %) '(1 3 5 7 9 4))
;=> 5

答案 1 :(得分:5)

这很容易做到,但要注意大多数情况下,如果你编写的代码适用于事物索引(尤其是lazy-seqs),通常只需要处理就可以更整齐地完成整个事情。序列。但是,如果您确定要处理索引,那就像(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll)))一样简单。