4

私は地図のリストを持っています:

(def mylist
  [{:id 1 :sub [{:subid 1} {:subid 2}]}
   {:id 2 :sub [{:subid 3}]}])

次のアイテムの数を含むリストの各マップ要素に、新しいキーと値のペアを追加したいと思います:sub

[{:id 1 :sub [{:subid 1} {:subid 2}] :subcount 2}
 {:id 2 :sub [{:subid 3}] :subcount 1}]

これどうやってするの?

4

1 に答える 1

7

clojure では、「マップへの追加」は assoc で行われ、指定された値が追加された新しいマップが返されます。通常、もののコレクションに対して同じ操作を実行する場合は、このmap関数を使用します。

(defn subcount
  "return the number of items in the :sub of m"
  [m]
  (count (:sub m)))

(defn add-count
  "add subcount to the given map"
  [m]
  (assoc m :subcount (subcount m)))

(defn add-counts
  "add subcount to all the objects"
  [objects]
  (map add-count objects))

(def mylist
  [{:id 1 :sub [{:subid 1} {:subid 2}]}
   {:id 2 :sub [{:subid 3}]}])

(add-counts mylist)
=> ({:sub [{:subid 1} {:subid 2}], :subcount 2, :id 1} {:sub [{:subid 3}], :subcount 1, :id 2})
于 2012-12-20T08:22:30.627 に答える