Сортировка списка в Эрланге - PullRequest
2 голосов
/ 22 октября 2010

Как можно отсортировать список в Erlang в зависимости от тега для каждого элемента?

Если у меня есть процесс, который зацикливается и получает одно значение из нескольких процессов, а затем я хочу расположить список в соответствии стег (который является индексом) в качестве элемента получен.

Как это сделать без использования BIF?

В настоящее время я делаю следующее, но хотел бы упорядочить список, когда элементдобавляется, как сортировка вставки с использованием тегов.

fibLoop(calcData) ->
receive
 {Number, Tag} ->
 fibLoop([{Number, Tag}|calcData]);

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

Есть несколько способов сделать то, что вы хотите, немного в зависимости от того, какое значение вы хотите использовать позже.

Простым решением было бы использование gb_trees.gb_trees - это отсортированная структура, которую вы можете зациклить, используя итератор.

Или, если вы хотите сохранить простоту и иметь список, вы можете использовать orddict (или, возможно, ordsets).

orddict:store(Number, Tag, CalcData)

вставить {Number, Tag} в упорядоченный список.Для получения дополнительной информации см. Документацию для определения.

Чтобы получить наименьшее значение в списке, которое вы можете использовать hd / 1, и получить самые большие списки: last / 1 (не то, чтобы я рекомендовал списки: last, учтите, вы).

2 голосов
/ 22 октября 2010

Что-то вроде этого, вероятно, будет работать:

insert({_, Tag} = Data, [{_,HTag}|_] = List) when Tag >= HTag ->
  [Data | List];
insert(Data, [H | T]) ->
  [H | insert(Data, T)];
insert(Data, []) ->
  [Data].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...