【问题标题】:Transform nested clojure maps转换嵌套的 clojure 映射
【发布时间】:2013-10-30 13:04:58
【问题描述】:

我在转换 clojure 映射时遇到问题。地图有一个向量作为元素,而这些向量又将地图作为元素。

原图是这样的:

{"values" [{"sub" false, "name" "Adhoc"} {"acm" true, "list" true, "deval" true, "name" "Buyer"}]}

向量中的映射始终具有键“名称”,但其他键可能会有所不同。 名称元素应作为地图中的键。 作为最终结果,我需要将原始地图转换为:

{"values" {"Adhoc" {"sub" false}, "Buyer" {"deval" true, "acm" true, "list" true}}

问题是向量中的地图可以有任意数量的元素,我真的不知道如何通过循环来解决这个问题。 任何建议将不胜感激。

【问题讨论】:

    标签: vector clojure maps


    【解决方案1】:

    这将为您处理地图矢量:

    (defn merge-by
      [maps k]
      (->> maps
           (map (juxt #(get % k) #(dissoc % k)))
           (into {})))
    
    (merge-by [{"sub" false, "name" "Adhoc"} 
               {"acm" true, "list" true, "deval" true, "name" "Buyer"}] 
              "name")
    ;; => {"Adhoc" {"sub" false}, "Buyer" {"deval" true, "acm" true, "list" true}}
    

    这将处理外部地图(如果存储在my-map):

    (update-in my-map ["values"] merge-by "name")
    

    【讨论】:

    • 太棒了 xsc!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多