clojure.core.reducers是否有map-indexed
替代方案?我希望像r/map
一样懒散地工作(没有构建新的序列)。
答案 0 :(得分:5)
我怀疑您真正想要使用的是transducer,因为map-indexed
具有1-arity版本(map
,filter
以及许多其他版本核心功能)返回一个传感器。传感器是可组合的,不会创建中间序列。这是一个简短的例子:
(def xf (comp
(map-indexed (fn [i value] [i value]))
(filter (fn [[i value]] (odd? i)))
(map second)))
这表示:使用map-indexed
生成索引向量,仅过滤掉索引为奇数的向量,并获取第二个元素。这是一种啰嗦的说(filter odd? collection)
的方式,但它仅用于示例目的。
您可以将其与into
:
(into [] xf "ThisIsATest")
=> [\h \s \s \T \s]
或者您可以使用transduce
功能并将str
应用于结果:
(transduce xf str "ThisIsATest")
=> "hssTs"