3

我在转换 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}}

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

4

1 回答 1

3

这将为您处理地图矢量:

(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")
于 2013-10-30T13:21:47.097 回答