我有一个地图列表,地图中的一个键是可能重复的键。我想删除/合并列表。例如:
(def data [{:id 1 :a 2 :b 3 :c 4} {:id 1 :c 5 :d 6} {:id 2 :a 100 :b 101 :c 102} {:id 2 :a 103 :d 104} {:id 2 :a 200 :f 201}])
我想结束:
[{:id 1 :a 2 :b 3 :c 5 :d 6} {:id 2 :a 200 :b 101 :c 102 :d 104 :f 201}]
(我已经提出了这个问题,以便合并/合并工作,但事实是我并不真正关心重叠值会发生什么;第一个或最后一个可以获胜)。
我所拥有的是:
(vals (apply merge-with merge (into #(hash-map (:id %) %) data)))
哪个确实有效,但我想知道是否有更好、更简洁或优雅的方式来做到这一点。我还想知道性能,因为我认为into
正在做序列的完整副本,并将整个事情强制到内存中(原始数据是一个惰性序列)。