如何按Erlang映射列表的键汇总值?

如何按Erlang映射列表的键汇总值?,erlang,Erlang,以下是我的地图列表: Map = [#{votes=>3, likes=>20, views=> 100},#{votes=>0, likes=>1, views=> 70},#{votes=>1, likes=>14, views=> 2000}]. 我想返回所有地图条目的摘要。我试图用fun()s解决这个问题,但逻辑没有意义,我只得到了不可执行的代码 问题是不能更改Erlang中的变量,否则这将起作用: Summary = #{

以下是我的地图列表:

Map = [#{votes=>3, likes=>20, views=> 100},#{votes=>0, likes=>1, views=> 70},#{votes=>1, likes=>14, views=> 2000}].
我想返回所有地图条目的摘要。我试图用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]].
摘要=#{
票数=>0,
喜欢=>0,
视图=>0,
},

[地图:更新(键,地图:获取(键,地图项目)+地图:获取(键,摘要),摘要)| |地图项目折叠
族的函数设计用于此类情况。在您的情况下,以下代码计算包含列表中地图项目总数的地图:

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
值是映射
{vows=>4,likes=>35,views=>2170}