我有一个2级嵌套的地图,如何更新第二级的每个值?现在我正在这样做:
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
本身也可能有嵌套地图。
答案 0 :(得分:1)
您也可以在外面使用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)
答案 1 :(得分:1)
Enum.map(items, fn({k,v}) ->
{k, put_in(v, [:items2, :some_key], 123)}
end)