Прежде всего, я ничего не знаю о Erlang, мы являемся мной и коллегой, переписывающей карту Уменьшить на couchDB от JS до Erlang в качестве теста.Erlang: Поиск нескольких максимальных значений списка
В входе мы имеем что-то вроде:
{[
{<<"score">>, {[ {<<"max">>, SCORE_MAX} ]} },
{<<"points">>, {[ {<<"max">>, POINTS_MAX}, {<<"total">>, POINTS_TOTAL} ]} },
{<<"time">>, {[ {<<"total">>, TIME_TOTAL} ]} },
{<<"success">>, SUCCESS},
//etc..
]}
Мы хотели бы пройти список [[оценка, прогресс, точки]] и вывести «макс (оценка), максимальная (прогресс), не более (пунктов) "этого списка.
До сих пор единственное, что мы преуспеваем делаем это один цикл на макс (значение) или сумма (стоимость), мы хотим, например:
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)),
Любая идея, как мы можем сделать это в более эффективный способ? , потому что здесь мы просто делаем цикл (списки: карта) для каждого желаемого значения. И наш ум слишком туго зависит от процедурного программирования и изменяемых переменных, поэтому мы не можем найти эффективный способ сделать это.
Благодаря
Я думаю, что я не выставил проблему правильно, поскольку мы находимся в пределах couchview. Но вход представляет собой массив примера в голове. Так что, нам нужен «Макс максимума». На работе мы перешли и разделились на большее количество видов, чтобы упростить все (синтаксис erlang и т. Д.), Но для понимания того, как это можно сделать с использованием чистого Erlang, я буду обновлять позже .. (на этой неделе, вероятно, когда i У меня будет время для установки проблемы за пределами couchdb) В любом случае спасибо за попытку :) – cyqui
Я обновил ответ, чтобы соответствовать вашим комментариям. –
Удивительный! это именно то, что я надеялся, что мы сможем сделать в erlang .. Попробуем это в следующий раз, когда у меня что-то похожее (dict & dict: update - это удивительность здесь для нас) – cyqui