Dictionary 迭代地图的惯用方法&x27;改变';每个值返回一个映射?

Dictionary 迭代地图的惯用方法&x27;改变';每个值返回一个映射?,dictionary,clojure,idioms,Dictionary,Clojure,Idioms,假设我希望m中的每个值都递增。我能想到的唯一办法就是 (def m {:a 1 :b 2 :c 3}) 有更好的方法吗?我需要在我的代码中经常这样做,它看起来有点像黑客。我确实需要在这里使用映射(主要用于O(1)查找,键是UUID,值是映射),而不是向量或列表。在这里找到了一些看起来不错的东西: 那你就可以了 (defn update-map [m f] (reduce-kv (fn [m k v] (assoc m k (f v))) {} m)) 得到 (update-m

假设我希望
m
中的每个值都递增。我能想到的唯一办法就是

(def m {:a 1 :b 2 :c 3})

有更好的方法吗?我需要在我的代码中经常这样做,它看起来有点像黑客。我确实需要在这里使用映射(主要用于O(1)查找,键是UUID,值是映射),而不是向量或列表。

在这里找到了一些看起来不错的东西:

那你就可以了

(defn update-map [m f] 
  (reduce-kv (fn [m k v] 
    (assoc m k (f v))) {} m))
得到

(update-map {:a 1 :b 2} inc)

如果需要,您可以将
k
提供给
f
或制作一个
更新键值
函数,该函数包含两个函数
f
g
,并分别应用于键值和键值。

这看起来相关:可能重复使用fmap,前面已回答:
(update-map {:a 1 :b 2} inc)
 {:a 2 :b 3}