如何在地图矢量中对地图中的每个值应用函数。
如果我有地图矢量
(def vector-of-maps [{:a 1 :b 2} {:a 3 :b 4}])
想要对每个地图中的每个值应用一个函数,因此我想要相同的地图矢量,就像这样
(map #(+ 1 %) vector-of-maps)
结果是
[{:a 2 :b 3} {:a 4 :b 5}]
我希望它可以与任何地图矢量一起使用,而不仅仅是这个特定的地图....
答案 0 :(得分:4)
=> (defn update-map [m f] (reduce-kv (fn [m k v] (assoc m k (f v))) {} m))
=> (map #(update-map % inc) vector-of-maps)
({:b 3, :a 2} {:b 5, :a 4})
答案 1 :(得分:1)
也许
(defn mapv-map-values [f vm]
(letfn [(map-values [m] (zipmap (keys m) (map f (vals m))))]
(mapv map-values vm)))
......生产
(mapv-map-values inc [{:a 1 :b 2} {:a 3 :b 4}])
;[{:b 3, :a 2} {:b 5, :a 4}]
map-values
功能是@user100464's answer的唯一重要偏离,改编自here。
答案 2 :(得分:1)
你也可以这样做,但它很丑陋
(defn dodo [m] (map (fn [map] (apply merge (for [[k v] map] (assoc {} k (inc v))))) m))
(dodo [{:a 1 :b 2} {:a 3 :b 4}])
;({:a 2, :b 3} {:a 4, :b 5})