在Clojure中,如何使嵌套地图返回内部地图都设置为0的地图?

时间:2018-11-18 20:21:10

标签: clojure maps iteration

所以基本上,在给定输入{: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还是很陌生,并且我在循环和迭代中苦苦挣扎,所以任何帮助将不胜感激。

谢谢。

1 个答案:

答案 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}