В Clojure, как сделать так, чтобы вложенная карта возвращала карту с внутренней картой, установленной в 0? - PullRequest
0 голосов
/ 18 ноября 2018

Так в принципе, как мне сделать функцию, учитывая ввод {:A 1 :B 2 :C {:X 5 :Y 5 :Z 5} :D 1} и клавишу: C return {:A 1 :B 2 :C {:X 0 :Y 0 :Z 0} :D 1}?Это то же самое отображение, но с вложенной картой, установленной в 0. Учитывая, что мы знаем, что ключ: C имеет вложенные значения.

Я очень плохо знаком с clojure, и я борюсь с циклами и итерациямипоэтому любая помощь будет оценена.

Спасибо.

1 Ответ

0 голосов
/ 18 ноября 2018
(defn with-zero-vals-at-key
  [m k]
  (update m k (fn [m2] (zipmap (keys m2) (repeat 0)))))

(with-zero-vals-at-key {:A 1 :B 2 :C {:X 5 :Y 5 :Z 5} :D 1} :C)
;; => {:A 1, :B 2, :C {:X 0, :Y 0, :Z 0}, :D 1}

;; OR

(defn with-zero-vals
  [m]
  (zipmap (keys m) (repeat 0)))

(update {:A 1 :B 2 :C {:X 5 :Y 5 :Z 5} :D 1}
        :C
        with-zero-vals)
;; => {:A 1, :B 2, :C {:X 0, :Y 0, :Z 0}, :D 1}    
...