Clojure如何混合/合并两个地图

Clojure如何混合/合并两个地图,clojure,hashmap,Clojure,Hashmap,我是clojure的新手,我需要混合一个非常复杂(对我来说)的地图,里面有一个向量可以混合 原始地图: {:cars {:previous-page nil, :next-page 2, :count 33, :items [{:id 1, :name "test1"}, {:id 2, :name "test2"}]}, :trucks {:previous-page nil, :next-page 2, :count 11, :items [{:id 1, :name "test3"}

我是clojure的新手,我需要混合一个非常复杂(对我来说)的地图,里面有一个向量可以混合

原始地图:

{:cars   {:previous-page nil, :next-page 2, :count 33, :items [{:id 1, :name "test1"}, {:id 2, :name "test2"}]},
 :trucks {:previous-page nil, :next-page 2, :count 11, :items [{:id 1, :name "test3"}, {:id 2, :name "test4"}]},
 :boats  {:previous-page nil, :next-page 2, :count 22, :items [{:id 1, :name "test5"}, {:id 2, :name "test6"}]}}
第二张地图:

 {:cars   {:previous-page 2, :next-page 3, :count 33, :items [{:id 3, :name "test7"}, {:id 4, :name "test8"}]},
  :trucks {:previous-page 3, :next-page 4, :count 11, :items [{:id 3, :name "test9"}, {:id 4, :name "test10"}]},
  :boats  {:previous-page 4, :next-page 5, :count 22, :items [{:id 3, :name "test11"}, {:id 4, :name "test12"}]}}
我只需要将这两张地图混合在一张地图中:

{:cars   {:previous-page 2, :next-page 3, :count 33, :items [{:id 1, :name "test1"}, {:id 2, :name "test2"},{:id 3, :name "test7"}, {:id 4, :name "test8"}]},
 :trucks {:previous-page 3, :next-page 4, :count 11, :items [{:id 1, :name "test3"}, {:id 2, :name "test4"},{:id 3, :name "test9"}, {:id 4, :name "test10"}]},
 :boats  {:previous-page 4, :next-page 5, :count 22, :items [{:id 1, :name "test5"}, {:id 2, :name "test6"},{:id 3, :name "test11"}, {:id 4, :name "test12"}]}} 

您可以使用
merge with
将贴图与任意函数组合。这里似乎没有一个“规则”——对于
:上一页
:下一页
:计数
似乎是“最后一个赢了”,但
:项目似乎类似于
#(进入[]%”。一旦您可以将该规则作为一个函数清楚地陈述:

(fn combine [map1 map2] ...)

然后,您可以使用您定义的任何
combine
轻松地将地图与
merge with
合并。

合并它们的规则是什么?您是否需要一条规则,因为您将定期解决此问题,或者您可以修复数据?根据结果,我将推断如下:
(合并为(部分合并为#)(如果(coll?%1)(放入%1%2)%2))map1 map2)
@jmargolisvt我需要替换分页的值(上一页和下一页)按顺序我必须合并这些项目:[{1},{2},{3},{4}]