我第一次尝试
(merge-with list maps)
它适用于具有单一值的地图,但适用于类似的东西
{:a [1 2]} {:a [2 3]} {:a [3 4]}
它给了我
{:a (([1 2] [2 3]) [3 4])}
但我想拥有
{:a ([1 2] [2 3] [3 4])}
我刚刚发现我可以用向量包装地图的 vals:
(defn my-merge
[& coll]
(let [maps (map #(assoc % (first (keys %)) [(first (vals %))]) coll)]
(apply merge-with concat maps)))
但是 let 绑定似乎太嵌套了,有没有更简单的函数可以用来代替 concat?所以我可以有一些一行代码,如:
(merge-with the-function maps)