我有一张地图列表:
(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}]
我怎样才能做到这一点?
我有一张地图列表:
(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}]
我怎样才能做到这一点?
在 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})