我希望将一个值映射转换为另一个映射,使用相同的键,但对值应用一个函数。我认为在clojure api中有一个函数可以做到这一点,但我一直找不到它。
下面是我正在寻找的实现示例
(defn map-function-on-map-vals [m f]
(reduce (fn [altered-map [k v]] (assoc altered-map k (f v))) {} m))
(println (map-function-on-map-vals {:a "test" :b "testing"} #(.toUpperCase %)))
{:b TESTING, :a TEST}有人知道map-function-on-map-vals是否已经存在吗?我认为它是这样的(可能还有一个更好听的名字)。
发布于 2009-11-05 06:12:38
我是Clojure的n00b,所以可能会有更优雅的解决方案。这是我的:
(def example {:a 1 :b 2 :c 3 :d 4})
(def func #(* % %))
(prn example)
(defn remap [m f]
(apply hash-map (mapcat #(list % (f (% m))) (keys m))))
(prn (remap example func))anon函数从每个键和它的f‘’ed值生成一个小的2-list。Mapcat在map的键序列上运行此函数,并将整个工作连接到一个大列表中。"apply hash- map“从该序列创建一个新的映射。(% m)可能看起来有点奇怪,它是用于将键应用于map以查找关联值的惯用Clojure。
最强烈推荐的读物: The Clojure Cheat Sheet。
https://stackoverflow.com/questions/1676891
复制相似问题