2017-05-01 46 views
1

我有一個2級嵌套地圖,我如何更新第二級別的每個值?現在我這樣做:在Elixir中更新嵌套地圖

items = Enum.map(items, fn(a) -> 
    a.items2 = Enum.map(a.items2, fn(a2) -> 
     Map.put(x2, :some_key, 123) 
    end) 

    a 
    end) 

錯誤:

cannot invoke remote function "a.items2/0" inside match. 

我基本上知道這意味着什麼,但如何解決它?

請注意,a.items2本身也可能具有嵌套地圖。

+1

檢查出來的'update_in'或'put_in'功能,他們可能是幫幫我。 – JustMichael

回答

0

您可以使用Map.put外還有:

items = Enum.map(items, fn(a) -> 
    Map.put(a, :items2, Enum.map(a.items2, fn(a2) -> 
    Map.put(x2, :some_key, 123) 
    end) 
end) 

或地圖更新語法:

items = Enum.map(items, fn(a) -> 
    %{a | 
    items2: Enum.map(a.items2, fn(a2) -> 
     Map.put(x2, :some_key, 123) 
    end)} 
end) 
+0

謝謝。有其他方法嗎? – Oumak81

+1

還有'Map.update!',地圖更新語法('%{a | items2:Enum.map(...)}'),'put_in','update_in',可能也更好。 – Dogbert

1
Enum.map(items, fn({k,v}) -> 
    {k, put_in(v, [:items2, :some_key], 123)}  
end)