【问题标题】:update list of map value with matching value from another list of map使用另一个地图列表中的匹配值更新地图值列表
【发布时间】:2014-06-02 11:12:59
【问题描述】:

我有两个类似于下面的数据集。我正在尝试将 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

【问题讨论】:

    标签: map clojure


    【解决方案1】:

    假设你的数据是真的

    (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 条目。

    这显然是一个关系代数的事情,但我找不到适合的标准函数或函数组合。 Here 可能是一个合理的地方。

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2016-04-17
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2021-08-11
      • 2021-06-02
      相关资源
      最近更新 更多