我有一個地圖列表,地圖中的一個鍵是一個可能會重複的鍵。我想重複列表/合併列表。因此,例如:合併與合併:可以簡化嗎?
(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)))
哪些工作,但我不知道是否有一個更好的,更consise,或這樣的優雅,方式。我還想知道性能,因爲我認爲into
正在完成序列的完整副本,並將整個內容強制到內存中(原始數據是一個惰性序列)。
對'data'有任何排序保證嗎?我們知道所有具有相同':id'的地圖會一起出現嗎? (如果你不能保證,那麼這是*不可能*做懶惰!) – 2013-05-01 15:12:02
是的,他們將是連續的。它們是數據庫查詢的結果集。 – Kevin 2013-05-01 15:13:12