Dictionary Clojure将变换函数应用于映射的值

Dictionary Clojure将变换函数应用于映射的值,dictionary,clojure,hashmap,reducers,Dictionary,Clojure,Hashmap,Reducers,假设我有一张地图: {:top 2.8421709430404007E-14, :left 0, :down 240, :right 400N} 我如何迭代以将所有内容转换为整数 {:top 0, :left 0, :down 240, :right 400} 一个显而易见的解决办法是: {:top (:top m), :left (:left m), :down (:down m), :right (:right m)} 但感觉很重复 我觉得还原功能在这里可以很好地发挥作用,但我不

假设我有一张地图:

 {:top 2.8421709430404007E-14, :left 0, :down 240, :right 400N}
我如何迭代以将所有内容转换为整数

 {:top 0, :left 0, :down 240, :right 400}
一个显而易见的解决办法是:

 {:top (:top m), :left (:left m), :down (:down m), :right (:right m)}
但感觉很重复

我觉得还原功能在这里可以很好地发挥作用,但我不确定如何使用。

我不得不使用:

编辑:看起来也可以

编辑之二: 感谢@Andre提到
map vals
函数存在于
weavejester/medley
prismatic/pillowing

发件人:

发件人:

我必须使用:

编辑:看起来也可以

编辑之二: 感谢@Andre提到
map vals
函数存在于
weavejester/medley
prismatic/pillowing

发件人:

发件人:


对条目进行
映射可以是另一种方式:

(into {} (map (fn [[k v]] [k (int v)]) m))
;; {:top 0, :left 0, :down 240, :right 400}

对条目进行
映射可以是另一种方式:

(into {} (map (fn [[k v]] [k (int v)]) m))
;; {:top 0, :left 0, :down 240, :right 400}

仅供参考:许多人使用(或创建)映射VAL功能。例如,
weavejester/medley
prismatic/Pimming
都有使用瞬变的性能优势。@Andre谢谢,如果你想把这作为一个答案(带有链接/类似代码),我很可能会接受。我还发现你的答案很好,如果你愿意,只需添加示例。仅供参考:许多人使用(或创建)一个
map vals
函数。例如,
weavejester/medley
prismatic/Pimming
都有使用瞬变的性能优势。@Andre谢谢,如果你想把这作为一个答案(带有链接/类似代码),我很可能会接受。我还发现你的答案很好,如果你愿意,只需添加示例。
(defn map-vals
  "Build map k -> (f v) for [k v] in map, preserving the initial type"
  [f m]
  (cond
   (sorted? m)
   (reduce-kv (fn [out-m k v] (assoc out-m k (f v))) (sorted-map) m)
   (map? m)
   (persistent! (reduce-kv (fn [out-m k v] (assoc! out-m k (f v))) (transient {}) m))
   :else
   (for-map [[k v] m] k (f v))))
(into {} (map (fn [[k v]] [k (int v)]) m))
;; {:top 0, :left 0, :down 240, :right 400}