所以基本上,在给定输入{: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}
?这是相同的映射,但是嵌套映射都设置为0。假设我们知道键:C具有嵌套值。
我对Clojure还是很陌生,并且我在循环和迭代中苦苦挣扎,所以任何帮助将不胜感激。
谢谢。
答案 0 :(得分:4)
(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}