如果键存在:更新,否则:关联

if key exists: update, otherwise: assoc

在 reduce 循环中考虑这个:

(if (contains? m k)
  (update m k conj v)
  (assoc m k [v]))

有没有办法去掉 if 语句?

k在地图中不存在时,使用fnil处理v的nil值:

(update m k (fnil conj []) v)

虽然 fnil 的答案更引人注目,但我发现以下内容更容易阅读,尤其是在不熟悉 fnil 的情况下:

(assoc m k (conj (m k []) v))

其中 (m k []) returns mk 的值或默认为 [] 如果 k 不存在于 m.

如果 k 是一个符号,(k m []) 也可以。