3

Clojure マップの変換に問題があります。マップには要素としてベクトルがあり、ベクトルには要素としてマップがあります。

元のマップは次のようになります。

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

ベクター内のマップには常にキー「name」がありますが、他のキーは異なる場合があります。name 要素は、マップ内のキーとして機能する必要があります。最終結果として、元のマップを次のように変換する必要があります。

{"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 に答える