将值列表与地图值相结合的惯用方法是什么?
这是我想要的结果,但匿名函数看起来很丑陋。还有更好的方法吗?
> (update-in {:x #{}} [:x] #(apply conj % '(1 2)))
{:x #{1 2}}
答案 0 :(得分:4)
匿名功能是不必要的
(update-in {:x #{}} [:x] conj 1 2)
;=> {:x #{1 2}}
(update-in {:x #{}} [:x] into [1 2])
;=> {:x #{1 2}}
答案 1 :(得分:0)
您不必知道地图contains?
是否为您conj
值的关键字。调整你的例子......
(update-in {} [:x] #(apply conj % '(1 2)))
;{:x (2 1)}
......不是你想要的。
以下
(defn assocs [m k coll]
(assoc m k (into (get m k #{}) coll)))
如果密钥没有条目,则...提供空值。
(assocs {} :x [1 2])
;{:x #{1 2}}
(assocs {:x #{2}} :x [1 2])
;{:x #{1 2}}
您会在clojure.algo.graph中找到类似的代码,例如here。 (警告:graph
类型仅在其中一种算法中起作用,否则只会阻碍。)