【问题标题】:Function that returns the index of the first element in a map that satisfies a condition返回满足条件的映射中第一个元素的索引的函数
【发布时间】:2012-11-09 23:33:21
【问题描述】:

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

例子:

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

【问题讨论】:

标签: clojure functional-programming


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多