Clojure: Update the values of multiple keys

clojure.core has update/update-in functions to apply fn to a value by key.

(def p {:name "James" :age 26})

(update p :age inc)
;;=> {:name "James", :age 27}

(update p :age + 10)
;;=> {:name "James", :age 36}

With help of reduce, we can iteratively apply fn to some vals:

(defn update-vals [m ks & args]
  (reduce #(apply update % %2 args) m ks))

(update-vals {:a 0 :b 1 :c 2} [:a :b] inc)
;;=> {:a 1, :b 2, c 2} 

(update-vals {:a 0 :b 1 :c 2} [:a :b] + 10)
;;=> {:a 10, :b 11, c 2} 

** Using Specter library

(transform (multi-path :a :b) inc {:a 0, :b 1, :c 2})
;;=> {:a 1, :b 2, :c 2}

(transform [(submap [:a :b]) MAP-VALS] inc {:a 0, :b 1, :c 2})
;;=> {:c 2, :a 1, :b 2}

source stackoverflow

also see Apply a Function To All Value of a Map

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quan

10 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
1 0
Clojure supports flexible concurrency models for real world complexity: (Link): builtin support. (Link): similar to Golang concurrency model, w...
Quan viết 12 tháng trước
1 0
White
1 0
clojure (defn updatevalues m f & args] (reduce (fn r k v]] (assoc r k (apply f v args))) {} m)) (updatevalues {:a 1 :b 2 :c 3} inc) ;;= {:c 4,...
Quan viết 12 tháng trước
1 0
Bài viết liên quan
White
0 0
Clojure là ngôn ngữ functional có hỗ trợ OOP. Về mặt khoa học máy tính, có nhiều cách để thực hiện đa hình. Ở phiên bản trước 1.2, đa hình trong Cl...
Ngoc Dao viết gần 2 năm trước
0 0
White
2 0
Cách mã nguồn mở hoạt động vẫn là bí ẩn đối với nhiều người. Hi vọng bài viết nhằm gây quỹ cho Clojure dưới đây sẽ giúp giải tỏa thắc mắc cốt lõi c...
Ngoc Dao viết gần 2 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
10 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!