Создать список со случайными и уникальными номерами - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь составить список уникальных, случайных целых чисел определенной длины.

end_list = for x <- 0..10, do: :rand.uniform(50)
> [41, 9, 8, 50, 49, 1, 1, 7, 7, 47, 20]

Что я могу написать, чтобы передать условие "если еще не присутствует" в блоке do:

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Мне предложили этот однострочник, используя Stream.repeatedly/1 из другого места:

Stream.repeatedly(fn -> :rand.uniform(50) end) |> Stream.uniq |> Enum.take(10)
0 голосов
/ 04 декабря 2018

Вы можете использовать MapSet для него, который добавит элемент, только если он не существует.Затем, в конце концов, вы можете преобразовать MapSet в список.

Примерно так будет работать:

ms = for x <- 0..10, into: MapSet.new(), do: :rand.uniform(50)
end_list = MapSet.to_list(ms)
[2, 10, 15, 16, 19, 28, 34, 43, 48]
...