Dictionary Clojure:将元素添加到地图中的向量

Dictionary Clojure:将元素添加到地图中的向量,dictionary,vector,clojure,Dictionary,Vector,Clojure,我有这张地图 (defm{:a“aaa”:b{:c[“ss”“gg”]}) 我想将其更新为以下内容(将“uu”添加到向量:c): {:a“aaa”:b{:c[“ss”“gg”“uu”]} 这就是我想到的,我讨厌它: (在m[:b:c]中关联)(conj(进入m[:b:c])“uu”)) 我应该怎么做 (update-in m [:b :c] conj "uu") 我的想法是,updatein使您到达那里,并调用一个函数,该函数不仅接收那里的状态,而且还接收剩余的参数。因此,这里将使用[

我有这张地图

(defm{:a“aaa”:b{:c[“ss”“gg”]})
我想将其更新为以下内容(将“uu”添加到向量:c):

{:a“aaa”:b{:c[“ss”“gg”“uu”]}
这就是我想到的,我讨厌它:

(在m[:b:c]中关联)(conj(进入m[:b:c])“uu”))
我应该怎么做

(update-in m [:b :c] conj "uu")
我的想法是,
updatein
使您到达那里,并调用一个函数,该函数不仅接收那里的状态,而且还接收剩余的参数。因此,这里将使用
[“ss”“gg”]
“uu”
调用
conj
,数据结构中键
:c
的值将变为
[“ss”“gg”“uu”]


assoc in
没有任何初始状态,因此在您的示例中,您必须重新创建存在的内容。

但要注意陷阱:如果地图中没有键,那么
conj
将创建一个列表,而不是一个向量:
(在m[:b:d]conj“xxx中更新)
=>
{:a“aaa”,“b::c[“ss”“gg],:d(“xxx”)}
。为了避免这种情况,您应该处理
nil
值,如下所示:
(用m[:b:d](fnil conj[])“xxx”)更新
=>
{:a“aaa”,:b{:c[“ss”“gg”],:d[“xxx”}