Tay*_*ood 11
每当您减少关联集合时,您应该在使用时看到性能改进,reduce-kv因为它没有为键/值对分配向量/元组.reduce将处理集合(以及作为键/值元组集合处理的映射),但reduce-kv仅适用于关联结构,如地图和向量.
从IKVReduce协议docstring:
"具体关联类型的协议,可以通过key和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})
Run Code Online (Sandbox Code Playgroud)