首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure:如何将函数应用于hash-map中的条目子集?

Clojure:如何将函数应用于hash-map中的条目子集?
EN

Stack Overflow用户
提问于 2009-10-29 01:37:14
回答 2查看 4.8K关注 0票数 5

我不打算使用Clojure,并试图弄清楚如何做到这一点。

我想创建一个新的散列映射,对于散列映射中的键的子集,将一个函数应用于元素。做这件事最好的方法是什么?

代码语言:javascript
复制
(let 
   [my-map {:hello "World" :try "This" :foo "bar"}]
   (println (doToMap my-map [:hello :foo] (fn [k] (.toUpperCase k)))

然后,这应该会产生一个地图,其中包含以下内容

代码语言:javascript
复制
{:hello "WORLD" :try "This" :foo "BAR"}
EN

回答 2

Stack Overflow用户

发布于 2009-10-29 22:11:33

代码语言:javascript
复制
(defn doto-map [m ks f & args]
  (reduce #(apply update-in %1 [%2] f args) m ks))

示例调用

代码语言:javascript
复制
user=> (doto-map {:a 1 :b 2 :c 3} [:a :c] + 2)
{:a 3, :b 2, :c 5}

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2009-10-29 02:31:30

下面的方法似乎是可行的:

代码语言:javascript
复制
(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"}

也许有一种更好的方法可以做到这一点。也许有人可以想出一个很好的一行:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1638854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档