Vector Clojure:映射向量中映射中每个值的applyng函数

Vector Clojure:映射向量中映射中每个值的applyng函数,vector,map,clojure,Vector,Map,Clojure,如何将函数应用于映射向量中映射中的每个值 如果我有一个地图向量 (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}] 我希望它能处理任何地图矢量,而不仅仅是这一个….也许 => (defn update-map [m f] (reduce-kv (f

如何将函数应用于映射向量中映射中的每个值

如果我有一个地图向量

(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}]
我希望它能处理任何地图矢量,而不仅仅是这一个….

也许

=> (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})
(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
功能是唯一与之显著不同的功能,它是根据

你也可以这样做,但这很难看

(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})

可以使用
降低kv
here@user100464键的顺序是相反的,有没有办法改变这一点?@user100464,有没有办法只显示映射的VAL。@Vesna您的输入映射是无序的,而输出映射也是无序的。