【发布时间】:2012-02-23 07:31:53
【问题描述】:
在 Clojure 中,我想将多个映射组合成一个映射,其中具有相同键的映射组合成一个列表。
例如:
{:humor :happy} {:humor :sad} {:humor :happy} {:weather :sunny}
应该导致:
{:weather :sunny, :humor (:happy :sad :happy)}
我想过:
(merge-with (comp flatten list) data)
但它效率不高,因为 flatten 具有 O(n) 复杂性。
然后我想出了:
(defn agg[x y] (if (coll? x) (cons y x) (list y x)))
(merge-with agg data)
但感觉不是惯用的。还有什么想法吗?
【问题讨论】:
-
最后一个也会导致您的地图值包括集合的问题....
标签: clojure