1. ホーム
  2. dictionary

[解決済み] Clojureでマップの値に関数をマッピングする

2022-05-13 05:39:07

質問

私は値の1つのマップを、同じキーを持つ別のマップに変換したいが、値には関数が適用されている。私は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 はすでに存在しているのでしょうか?私はそれがあると思います (おそらくもっと素敵な名前でも)。

どのように解決するのですか?

私はあなたの reduce のバージョンが好きです。 慣用的だと思います。 以下はリスト内包を使ったバージョンです。

(defn foo [m f]
  (into {} (for [[k v] m] [k (f v)])))