2013-02-26 136 views
5

對於列表和向量,我們可以切片序列,並採取我們想要的任何部分。 如何做類似的操作來映射對象?在Clojure中切片地圖的習慣用法是什麼?

例如,我有地圖對象的列表,

(def plays [ 
     {:name "Burial",  :plays 979, :loved 9} 
     {:name "Eno",  :plays 2333, :loved 15} 
     {:name "Bill",  :plays 979, :loved 9} 
     {:name "Magma",  :plays 2665, :loved 31}]) 

對於每一個地圖,我想切掉劇列,並用默認值添加率列,什麼是做到這一點的慣用方式?

回答

17

assocdissoc是你的朋友在這種情況下:

(map #(-> % (dissoc :plays) 
      (assoc :rate 10)) plays) 
+0

Terse and to重點。簡單。美麗。 – omiel 2013-12-03 15:49:30

13

根據您的使用情況,您可能還會發現select-keys有用的除了assocdissoc

clojure.core/select-keys 
([map keyseq]) 
    Returns a map containing only those entries in map whose key is in keys 
(select-keys {:name "Eno" :plays 2333 :loved 15} [:name :loved]) 
;; => {:name "Eno" :loved 15} 
相關問題