2013-08-20 73 views
0

我是clojure的新手,我一直在盯着這一段時間,我確信有一些基本的東西我只是看不到。我想連詞兩套,但嵌套的時候,例如:更新嵌套地圖

(def foo {:b #{:test}}) 
(def bar {:a {:b #{:ab}} :c :d}) 

我想:

=>(update-in bar [:a :b] conj (:b foo)) 
{:a {:b #{#{:test} :ab}}, :c :d} 

我想這是有道理的,但我想要的是{:一{:B# {:test:ab}},::c:d}

我只是不能看出如何讓#{:test}離開set來連接它,或者正確訪問:b作爲給定集更新語法。

任何幫助非常感謝。

回答

1

您需要使用into而不是conj

(update-in bar [:a :b] into (:b foo)) 
;= {:a {:b #{:test :ab}}, :c :d} 
+0

'clojure.set/union'也將工作,雖然它可能具有不同的性能特徵(根據大小和所涉及的具體類型的套)。 –