如何在Elixir中生成一个随机数?

时间:2016-08-04 21:55:33

标签: random integer elixir

我需要生成一个随机数。我找到了Enum.random/1函数,但它需要一个可枚举的列表或数字范围。

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

3 个答案:

答案 0 :(得分:83)

您可以无缝地从Elixir代码中调用Erlang的rand模块。

random_number = :rand.uniform(n)

将给出1< = x< = n

的随机数

答案 1 :(得分:21)

&Enum.random/1

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

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

答案 2 :(得分:1)

正如 this other answer 暗示的那样,您可以使用 Enum.random/1,但您不需要实际上需要传递它“一个数字列表"(作为问题,as originally written)假设。

As a commenter on that other answer pointed out, the docs for 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])