reducer的map-indexed替代方案

Yev*_*hov 0 clojure

map-indexedclojure.core.reducers 有替代方案吗?我想要一些懒散的东西r/map(没有构建新的序列).

Jos*_*osh 5

我怀疑你真的想用的是一个转换器,因为map-indexed有一个1元数的版本(一样map,filter和许多其他核心功能)返回一个转换器.传感器是可组合的,不会创建中间序列.这是一个简短的例子:

(def xf (comp
          (map-indexed (fn [i value] [i value]))
          (filter (fn [[i value]] (odd? i)))
          (map second)))
Run Code Online (Sandbox Code Playgroud)

这表示:使用生成索引向量map-indexed,仅过滤掉索引为奇数的向量,并获取第二个元素.这是一种冗长的说法,(filter odd? collection)但它只是出于示例目的.

你可以使用它into:

(into [] xf "ThisIsATest")
=> [\h \s \s \T \s]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用该transduce功能并应用于str结果:

(transduce xf str "ThisIsATest")
=> "hssTs"
Run Code Online (Sandbox Code Playgroud)

  • 这实际上根本不是`(filterodd?coll)`,因为您过滤的是索引,而不是值。相反,它是`(take-nth 2 (rest coll))`。 (2认同)