6

リストとベクトルの場合、シーケンスをスライスして、必要な部分を取得できます。オブジェクトをマップするために同様の操作を行う方法は?

たとえば、マップオブジェクトのリストがあります。

(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}])

マップごとに、再生列を切り取り、デフォルト値でレート列を追加したいのですが、これを行うための慣用的な方法は何ですか?

4

2 に答える 2

18

assocdissoc この場合、あなたの友達は次のとおりです。

(map #(-> % (dissoc :plays) 
            (assoc :rate 10)) plays)
于 2013-02-26T06:06:50.760 に答える
14

ユースケースによっては、およびに加えて役立つ場合もあり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}
于 2013-02-26T06:42:31.460 に答える