这就是我的地图列表:
Map = [#{votes=>3, likes=>20, views=> 100},#{votes=>0, likes=>1, views=> 70},#{votes=>1, likes=>14, views=> 2000}].
我想返回所有地图条目的摘要。我试图用fun()来解决这个问题,但逻辑没有意义,我只有不可执行的代码。
问题是人们无法在Erlang中更改变量,否则会起作用:
Summary = #{
votes=>0,
likes=>0,
views=>0,
},
[maps:update(Key, maps:get(Key, MapItem) + maps:get(Key, Summary), Summary) || MapItem <- Map, Key <- [votes, likes, views]].
如何解决这个问题并成功总结一系列地图的价值?
答案 0 :(得分:4)
fold
系列的功能旨在用于此类情况。在您的情况下,以下代码计算包含列表中地图中条目总数的地图:
MapsList = [#{votes=>3, likes=>20, views=> 100},
#{votes=>0, likes=>1, views=> 70},
#{votes=>1, likes=>14, views=> 2000}],
Summary = lists:foldl(fun (Map, AccL) ->
maps:fold(fun (Key, Value, Acc) ->
Acc#{Key => Value + maps:get(Key, Acc, 0)}
end, AccL, Map)
end, #{}, MapsList)
Summary
值是地图#{votes => 4, likes => 35, views => 2170}
。