这是我的地图列表的样子:
Map = [#{votes=>3, likes=>20, views=> 100},#{votes=>0, likes=>1, views=> 70},#{votes=>1, likes=>14, views=> 2000}].
Run Code Online (Sandbox Code Playgroud)
我想返回所有地图条目的摘要。我试图用 fun()s 解决这个问题,但逻辑没有意义,而且我只有不可执行的代码。
问题是不能改变 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]].
Run Code Online (Sandbox Code Playgroud)
应该如何解决这个问题并成功总结地图列表的值?
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)
Run Code Online (Sandbox Code Playgroud)
Summary值是地图#{votes => 4, likes => 35, views => 2170}。