如何使用函数更新地图值?

时间:2014-03-18 18:21:25

标签: clojure

我有地图m,密钥k和功能f。是否可以更简单地重写此代码?

(assoc m k (f (get m k))

2 个答案:

答案 0 :(得分:6)

尝试clojure.core/update-in

(update-in m [k] f)

编辑:Clojure 1.7介绍了clojure.core/update

(update m k f)

答案 1 :(得分:4)

update-in做得很好,虽然它对嵌套地图特别有用:

> (update-in {:a 4} [:a] + 7)
{:a 11}

> (update-in {:a {:b 4 :c {:d 8}} :q :foo} [:a :c :d] + 7) 
{:a {:c {:d 15}, :b 4}, :q :foo}