![](/img/trans.png)
[英]How to use assoc-in to update multiple values in a map? (Clojure)
[英]Clojure: how to update multiple values in a map
我有一個包含多個計數器的地圖,例如:
(def m1 (atom {:counter1 10 :counter2 3 :counter3 11}))
;;;=> {:counter1 10, :counter3 11, :counter2 3}
我想將counter2加1,並將counter1和counter3重置為零。
我似乎無法想辦法。 我遇到的最好的是以下功能。 但是,此函數不會將counter1和counter3重置為零,它只是不會遞增它們。
(swap! m1 (fn [m]
(merge-with + m {:counter1 0
:counter2 1
:counter3 0})))
;;;=> {:counter1 10, :counter3 11, :counter2 4}
是否可以通過單次交換來執行我要求的操作!或者我是否需要通過調用swap來實現! 和多次重置!
把事情簡單化! 使用正常的merge
並從地圖再次訪問:counter2
。
(swap! m1 (fn [m]
(merge m {:counter1 0
:counter2 (-> m :counter2 inc)
:counter3 0})))
好吧,您可以修改代碼來執行此操作,方法是將merge-with
inside中的+
替換為其他函數:
(defn my-plus [old new] (if (pos? new) (+ new old) 0))
我仍然在考慮解決它的不同方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.