2015-09-25 30 views
0

我對更新地圖中的值所需的語法感到困惑,其中所述值是地圖的矢量。Clojure,更新地圖中的嵌套內容

拿到一張地圖:

{:data-extracts [ 
         {:name "some name" 
         :data "some data" 
         }]} 

如何更新的值的數據,我知道你可以使用assocconj修改地圖(以及返回新地圖),但我不能確定這是如何工作當嵌套元素存在時。

期望的結果:

{:data-extracts [ 
         {:name "some name" 
         :data "new data" 
         }]} 

有沒有辦法做到像下面這樣?

(update :data-extracts :data "new data") 

這是如何實現的?

我試過如下:

(assoc opts :data-extracts [:name "Secret Escapes" 
          :data "new data"])) 

但如我所料不工作。

回答

3

當使用嵌套結構時,您需要使用*-in函數(在本例中爲assoc-in),併爲每個嵌套級別指定一個鍵。在矢量的情況下,它只是指數,在地圖的情況下,它是很明顯的:

(assoc-in [:data-extracts 0 :data] "new data") 
+0

如果我在上面像'(更新我的地圖指定我的地圖[:數據提取0:數據]「新數據「)是告訴我字符串不能被轉換爲函數。猜測是因爲「新數據」不是字符串 –

+0

@ChrisEdwards查看最新的編輯。在發佈後不久我意識到,抹去了答案並對其進行了編輯。對困惑感到抱歉。 –

+0

我確實遇到過關聯,但無法弄清我的用例的語法。謝謝。 –