【发布时间】:2014-03-26 21:11:39
【问题描述】:
我有一个嵌套的 hashmap,其结构如下:
(def pathmap {:order {:genus {:species {:cat2 "data", :cat1 "data"}}}})
我需要的是一个类似 assoc-in 的函数,它允许我将新的键值对添加到最里面的嵌套映射中,而不是简单地替换已经存在的内容。例如:
(my-assoc-merge pathmap [:order :genus :species] {:cat3 "data"})
;=> {:order {:genus {:species {:cat3 "data" :cat2 "data", :cat1 "data"}}}}
我想我可以通过稍微改变 assoc-in 函数来使用 merge-with 和 union 来轻松做到这一点:
(defn my-assoc-merge
[m [k & ks] v]
(if ks
(assoc m k (my-assoc-merge (get m k) ks v))
(assoc m k (merge-with clojure.set/union (get m k '{}) v))))
不幸的是,这给了我错误“CompilerException java.lang.UnsupportedOperationException:此类型不支持计数:关键字,编译:(core.clj:34:12)”。我哪里错了?
【问题讨论】:
标签: clojure