0
首先我不知道Erlang的任何信息,我们是一个同事,将couchDB中的Map Reduce从JS更改为Erlang作为测试。Erlang:查找列表的多个最大值
在输入,我们有这样的事:
{[
{<<"score">>, {[ {<<"max">>, SCORE_MAX} ]} },
{<<"points">>, {[ {<<"max">>, POINTS_MAX}, {<<"total">>, POINTS_TOTAL} ]} },
{<<"time">>, {[ {<<"total">>, TIME_TOTAL} ]} },
{<<"success">>, SUCCESS},
//etc..
]}
我们想遍历列表[比分,进度,分]和输出的“最大(得分),MAX(进度),MAX(点)“的名单。
到目前为止,我们成功做的唯一的事情是按最大值(值)或和(数值)一个循环中,我们想例如:
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)),
任何想法,我们如何能够以更有效的方式做到这一点? ,因为在这里我们只是为我们想要的每一种价值做一个循环(列表:map)......而且我们的思维太紧以至于程序编程和可变变量,所以我们不能找出一个有效的方法来实现它。
感谢
我觉得我没有正确地暴露这个问题,因为我们在couchview内。 但输入是头部示例的数组。 所以,我们需要'最大的最大值'。 在工作中,我们继续前进,并分解到更多的视图来简化一切(erlang语法等..),但为了理解如何使用纯Erlang完成,我稍后会更新..(本周结束可能当我有时间在couchdb以外设置问题) 无论如何感谢您的尝试:) – cyqui
我已更新答案以配合您的意见。 –
太棒了!这正是我希望我们可以在erlang中做的事情。 下次我有类似的东西时会尝试它(字典和字典:更新是我们的真棒) – cyqui