reduce 和 reduce-kv 有什么区别?
何时使用 reduce-kv 而不是 reduce ,反之亦然?
答案 0 :(得分:11)
每当你减少关联集合时,你应该看到使用reduce-kv
时性能的提高,因为它没有为键/值对分配向量/元组。 reduce
将处理集合(以及作为键/值元组集合处理的映射),但reduce-kv
仅适用于地图和矢量等关联结构。
来自IKVReduce
协议docstring:
“可以减少自身的具体关联类型的协议 通过键和val的函数比地图上的第一次/下一次递归更快 条目。由clojure.core / reduce-kv调用,并且具有相同的功能 语义(只是不同的arg顺序)。“
使用它们之间的区别在于您不需要在缩减函数中对结构/值进行解构:
(reduce (fn [m [k v]]
(assoc m k (str v)))
{}
{:foo 1})
(reduce-kv (fn [m k v]
(assoc m k (str v)))
{}
{:foo 1})