如何在clojure中检查地图中的重复项?

tru*_*fle 6 maps dictionary clojure duplicates

所以我有一个如下列表:

({:name "yellowtail", :quantity 2} {:name "tuna", :quantity 1} 
{:name "albacore", :quantity 1} {:quantity 1, :name "tuna"})
Run Code Online (Sandbox Code Playgroud)

我的目标是搜索地图项目列表并查找重复项密钥,如果有重复项,则增加数量.所以在列表中我有两个出现的金枪鱼映射元素.我想删除一个,只是增加另一个的数量.所以结果应该是:

({:name "yellowtail", :quantity 2} {:name "tuna", :quantity 2} 
{:name "albacore", :quantity 1} )
Run Code Online (Sandbox Code Playgroud)

随着:金枪鱼的数量增加到2.我试图使用recur来做到这一点没有成功,我不确定recur是否是一个很好的方向.有人能指出我正确的方向吗?

Jus*_*ous 5

您可以group-by :name将您的元素,然后map通过分组的集合汇总值.

像这样的东西

(->> your-list 
  (group-by :name) 
  (map (fn [[k v]] 
         {:name k :quantity (apply + (map :quantity v))})))   
Run Code Online (Sandbox Code Playgroud)

PS我假设您需要对元素的数量求和,因为不清楚您需要增加什么.