2

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

例子:

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

2 回答 2

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
于 2012-11-10T00:13:01.530 回答
5

这很容易做到,但请注意,大多数情况下,如果您正在编写使用事物索引(尤其是惰性序列)的代码,通常只需使用序列就可以更整齐地完成整个事情。但是,如果您确定要处理索引,那么它就像(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll))).

于 2012-11-10T00:13:36.410 回答