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”}