2012-12-20 100 views
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}] 

我怎样才能做到这一点?

+1

您的括号是否在这里?看起来像你打算:子计数键出现在顶层地图中,而不是在与子键关联的向量内。 – Alex

+0

你说得对。修复。 – tobiasbayer

回答

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}) 
+0

非常全面的解释。谢谢! – tobiasbayer

相关问题