【发布时间】:2017-07-10 23:18:53
【问题描述】:
首先我对Erlang一无所知,我们是我和一个同事,将couchDB中的Map Reduce从JS重写为Erlang作为测试。
在输入中我们有类似的东西:
{[
{<<"score">>, {[ {<<"max">>, SCORE_MAX} ]} },
{<<"points">>, {[ {<<"max">>, POINTS_MAX}, {<<"total">>, POINTS_TOTAL} ]} },
{<<"time">>, {[ {<<"total">>, TIME_TOTAL} ]} },
{<<"success">>, SUCCESS},
//etc..
]}
我们想遍历列表[ [score, progress, points ] ] 并输出这个列表的“max(score), max(progress), max(points)”。
到目前为止,我们成功做的唯一一件事是每个我们想要的 max(value) 或 sum(value) 一个循环 例如:
PROGRESS_MAX = lists:max(lists:map(fun({Value}) ->
{Progress} = proplists:get_value(<<"progress">>, Value),
proplists:get_value(<<"max">>, Progress)
end, Values)),
LEVEL_MAX = lists:max(lists:map(fun({Value}) ->
{Level} = proplists:get_value(<<"level">>, Value),
Max = proplists:get_value(<<"max">>, Level, 0)
end, Values)),
POINTS_TOTAL = lists:sum(lists:map(fun({Value}) ->
{Points} = proplists:get_value(<<"points">>, Value),
proplists:get_value(<<"total">>, Points)
end, Values)),
知道如何以更有效的方式做到这一点吗? 因为在这里我们只是为我们想要的每一种值做一个循环(列表:映射)..我们的思维太紧张了,无法进行过程编程和可变变量,所以我们无法找到一种有效的方法..
谢谢
【问题讨论】:
标签: algorithm list functional-programming erlang