我有两个类似于下面的数据集。我试图将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
答案 0 :(得分:2)
假设您的数据确实是
(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
所需翻译的地图;然后我们将其按地图应用到:id
中的map2
条目。
这显然是关系代数的事情,但我无法找到适合的标准函数或函数组合。 Here可能是一个合理的地方。