2013-10-30 104 views
2

我無法轉換clojure地圖。該地圖具有作爲元素的矢量,而矢量又具有地圖作爲元素。轉換嵌套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}} 

的問題是載體內的地圖可以有元素的任意量,我真的不知道如何解決,隨着循環。 任何建議將不勝感激。

回答

2

這過程圖的矢量你:

(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") 
+0

真棒XSC!謝謝一堆! –

+0

很高興能幫到你! – xsc