【发布时间】:2013-06-27 03:29:11
【问题描述】:
我无法找到以下问题的解决方案:
假设我有一张地图:
(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]))
(可能有更好的方法...)但我希望更多的是具有以下属性的动态函数:
- 在不知道结构的情况下保留两个映射中的所有键
- 使用右侧映射中的值更新任何键
- 如果一个key的val是一个vector,那么
conj那个vector和右边map的vector(当然如果有合适的key存在的话)
提前感谢您的帮助:)
【问题讨论】:
标签: clojure