如何按Erlang地图列表的键来汇总值?

时间:2018-05-13 21:55:38

标签: erlang

这就是我的地图列表:

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]].

如何解决这个问题并成功总结一系列地图的价值?

1 个答案:

答案 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}