(def m {:a 1 :b 2 :c 3})
我想说我希望m
中的每个值都递增。我能想到的唯一方法是
(into {}
(map
(fn [[key val]]
[key (inc val)])
m))
有更好的方法吗?我需要在我的代码中做很多事情,它看起来有点hacky。我确实需要在这里使用地图(主要用于O(1)查找,键是UUID,值是地图),而不是矢量或列表。
答案 0 :(得分:2)
在这里找到了一些看起来不错的东西:http://clojuredocs.org/clojure.core/reduce-kv。
(defn update-map [m f]
(reduce-kv (fn [m k v]
(assoc m k (f v))) {} m))
然后你可以做
(update-map {:a 1 :b 2} inc)
获取
{:a 2 :b 3}
如果需要,您可以向k
提供f
或制作update-key-values
函数,该函数包含两个函数f
和g
并将其应用于键和值分别。