如何在 Elixir 中生成随机数?

问题描述 投票:0回答:4

我需要生成一个随机数。我找到了

Enum.random/1
函数,但它需要一个可枚举的值,例如数字列表或数字范围。

这是获得随机数的唯一方法吗?

random integer elixir
4个回答
166
投票

您可以从 Elixir 代码无缝调用 Erlang 的

rand
模块

random_number = :rand.uniform(n)

将给出一个从 1 开始的随机数 <= x <= n


87
投票

&Enum.random/1

Enum.random(0..n)
会随机生成
0 to n

您也可以发送列表作为参数


15
投票

也许这个其他答案暗示,你可以使用

Enum.random/1
,但你实际上需要传递它“数字列表”(作为问题,如最初写的)假设。

正如其他答案的评论者指出的那样

Enum.random/1
的文档指出:

如果将范围传递给函数,则该函数将在范围限制之间选择一个随机值,而不遍历整个范围(从而在恒定时间和恒定内存中执行)。

因此这些应该(至少大致)等效:

:rand.uniform(n)
1..n |> Enum.random()

根据您想要“随机”数字的具体原因,您也可以使用

System.unique_integer/1
。以下“返回一个在当前运行时实例中唯一的整数”:

System.unique_integer()

一个唯一的正整数(可用于生成“随机名称”):

System.unique_integer([:positive])

唯一单调递增整数:

System.unique_integer([:monotonic])

0
投票

我需要一个不带零的 6 位整数,所以我这样做了:

Enum.map(0..5, fn _ -> Enum.random(1..9) end) |> Integer.undigits

我不会将其用于任何大型用途,但我认为对于少数数字和不经常使用的情况来说这是可以接受的。

© www.soinside.com 2019 - 2024. All rights reserved.