Biorąc pod uwagę zagnieżdżoną mapę z tylko kluczami słów kluczowych, taką jak {:foo {:bar 1 :baz [2 3] :qux {:quux 4}} :corge 5}
, jak mogę zaimplementować flatten-map
, aby (flatten-map {:foo {:bar 1 :baz [2 3] :qux {:quux 4}} :corge 5} "-")
wyprodukował coś w rodzaju {:foo-bar 1 :foo-baz [2 3] :foo-qux-quux 4 :corge 5}
.Spłaszczanie mapy przez dołączanie do kluczy
Moja najlepsza próba jest:
(defn flatten-map
([form separator] (flatten-map form separator nil))
([form separator prefix]
(if (map? form)
(into {} (map (fn [[k v]]
[(keyword (str prefix (name k)))
(flatten-map v separator (str prefix (name k) separator))])
form))
form)))
Jak widać nie mogę flatten-map
aby wybrać tylko te „listki”.
Perfect! Dziękuję Ci. –