创建具有随机和唯一编号的列表

时间:2018-12-03 21:22:47

标签: random erlang elixir unique

我正在尝试列出一定长度的唯一,随机整数。

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

我可以写些什么来传达do:块中的“如果还不存在”的条件?

2 个答案:

答案 0 :(得分:6)

使用Stream.repeatedly/1从其他地方为我提供了这种单线:

Stream.repeatedly(fn -> :rand.uniform(50) end) |> Stream.uniq |> Enum.take(10)

答案 1 :(得分:3)

您可以使用MapSet,它只会在元素不存在时添加它。然后,最后,您可以将MapSet转换为list。

类似的事情会起作用:

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]