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}