我無法找到解決如下問題:合併兩個複雜的數據結構
可以說我有一張地圖:
(def defaults {
:name "John"
:surname "Doe"
:info {:date-of-birth "01-01-1980"
:registered [{:type "newsletter" :name "breaking news" }]}
})
然後我通過一個類似結構的地圖,我想合相載體和覆蓋鍵的其餘部分:
(def new {
:name "Peter"
:info {:date-of-birth "11-01-1986"
:registered [{:type "alert" :name "mobile-alert" }]}
})
而且我想這樣的結果:
{:name "Peter"
:surname "Doe"
:info {:date-of-birth "11-01-1986"
:registered [{:type "newsletter" :name "breaking news" }
{:type "alert" :name "mobile-alert" }]}}
現在我可以用靜態的語法像這樣做很容易:
(reduce conj (get-in defaults [:info :registered]) (get-in new [:info :registered]))
(有可能是一個更好的辦法...),但我希望更多的動態功能具有以下屬性:
- 保持所有鍵從兩個圖,在不知道結構
- 更新與所述值的任何鍵從右側地圖
- 如果一個鍵的val爲一個矢量,然後
conj
用正確的地圖矢量矢量(如果當然相應的鍵存在)
感謝您的幫助提前:)
+1完全忘了'merge-with'。 –
完美地工作。我懷疑這與合併有關,但我無法弄清楚......乾杯! –