Map 使用另一地图列表中的匹配值更新地图值列表

Map 使用另一地图列表中的匹配值更新地图值列表,map,clojure,Map,Clojure,我有两个类似于下面的数据集。我正在尝试将map2中的id值更新为map1中相应的di2值 map1({id1:1 value:2 :valueb:4 id2:a}{id1:2 value:2 :valueb:4 id2:b}{id1:3 value:2 :valueb:4 id2:c}) map2({id:1 x:1 y:2}{id:2 x:4 y:6}{id:3 x:1 y:3}) 因此,输出将如下所示: map3({id:a x:1 y:2}{id:b x:4 y:6}{id:c x:1

我有两个类似于下面的数据集。我正在尝试将map2中的id值更新为map1中相应的di2值

map1({id1:1 value:2 :valueb:4 id2:a}{id1:2 value:2 :valueb:4 id2:b}{id1:3 value:2 :valueb:4 id2:c})
map2({id:1 x:1 y:2}{id:2 x:4 y:6}{id:3 x:1 y:3})
因此,输出将如下所示:

map3({id:a x:1 y:2}{id:b x:4 y:6}{id:c x:1 y:3})
感谢您的帮助,我不知道该怎么办

谢谢,
D

假设您的数据

(def map1 (list {:id1 1, :value 2, :valueb 4, :id2 'a}
                {:id1 2, :value 2, :valueb 4, :id2 'b}
                {:id1 3, :value 2, :valueb 4, :id2 'c}))

(def map2 (list {:id 1, :x 1, :y 2}
                {:id 2, :x 4, :y 6}
                {:id 3, :x 1, :y 3}))
。。。然后

(let [im (into {} (map (juxt :id1 :id2) map1))]
  (map #(assoc % :id (im (% :id))) map2))
。。。生成您要查找的内容:

; ({:y 2, :x 1, :id a} {:y 6, :x 4, :id b} {:y 3, :x 1, :id c})
首先,我们在
im
中构建一个所需翻译的地图,该地图来自
map1
;然后,我们对
map2
中的
:id
条目逐个映射地应用它

这显然是一个关系代数的东西,但我找不到一个标准函数或函数组合。可能是一个值得一看的地方