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