创建一个包含随机且唯一数字的列表。

4

我正在尝试创建一个指定长度的唯一随机整数列表。

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

do:块中,我应该写什么来表达“如果尚未存在”的条件?

2个回答

9

我从别处得到了这个使用Stream.repeatedly/1的一行代码:

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

3
这是正确的答案,它在每次迭代中返回10个元素,且每个元素都是唯一的。 - DarckBlezzer

3
您可以使用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]

4
这是一个不错的解决方案,但它不能在每次迭代中得到10个元素。 - DarckBlezzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接