我不打算使用Clojure,并试图弄清楚如何做到这一点。
我想创建一个新的散列映射,对于散列映射中的键的子集,将一个函数应用于元素。做这件事最好的方法是什么?
(let
[my-map {:hello "World" :try "This" :foo "bar"}]
(println (doToMap my-map [:hello :foo] (fn [k] (.toUpperCase k)))然后,这应该会产生一个地图,其中包含以下内容
{:hello "WORLD" :try "This" :foo "BAR"}发布于 2009-10-29 22:11:33
(defn doto-map [m ks f & args]
(reduce #(apply update-in %1 [%2] f args) m ks))示例调用
user=> (doto-map {:a 1 :b 2 :c 3} [:a :c] + 2)
{:a 3, :b 2, :c 5}希望这能有所帮助。
发布于 2009-10-29 02:31:30
下面的方法似乎是可行的:
(defn doto-map [ks f amap]
(into amap
(map (fn [[k v]] [k (f v)])
(filter (fn [[k v]] (ks k)) amap))))
user=> (doto-map #{:hello :foo} (fn [k] (.toUpperCase k)) {:hello "World" :try "This" :foo "bar"})
{:hello "WORLD", :try "This", :foo "BAR"}也许有一种更好的方法可以做到这一点。也许有人可以想出一个很好的一行:)
https://stackoverflow.com/questions/1638854
复制相似问题