Erlang - получить запись с самым высоким значением и запись с самым низким значением - PullRequest
0 голосов
/ 29 мая 2018

Я хочу отобразить ценовой диапазон списка записей о товарах.

Допустим, у меня есть этот список продуктов с двоичным значением для количества / цены.

Products = [#product{amount=<<"20.21">>}, #product{amount=<<"30.21">>}, #product{amount=<<"9.21">>}]

Моя цель - показать диапазон цен от минимума до максимума, например, << "9.21" >> - << "30.21" >>

Как можно идти дальше?

1 Ответ

0 голосов
/ 29 мая 2018
-module(my).
-compile(export_all).
-record(product, {name, price}).

products() ->
    [
        #product{name='a', price= <<"20.21">>}, 
        #product{name='b', price= <<"30.21">>}, 
        #product{name='c', price= <<"9.21">>},
        #product{name='d', price= <<"11.21">>}
    ].

price_range(Products) ->

    PriceFunc = fun(Product, {Min, Max}) ->
                    Price = binary_to_float(Product#product.price),
                    NewMin = min(Min, Price),
                    NewMax = max(Max, Price),
                    {NewMin, NewMax}
                end,

    InitPrice = binary_to_float(
                  (hd(Products))#product.price
                ),

    lists:foldl(PriceFunc, {InitPrice, InitPrice}, Products).

В оболочке:

9> c(my).                   
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}

10> Products = my:products().
[{product,a,<<"20.21">>},
 {product,b,<<"30.21">>},
 {product,c,<<"9.21">>},
 {product,d,<<"11.21">>}]

11> my:price_range(Products).
{9.21,30.21}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...