如何在 Elixir 中生成随机数?
Posted
技术标签:
【中文标题】如何在 Elixir 中生成随机数?【英文标题】:How to generate a random number in Elixir? 【发布时间】:2016-12-11 05:01:23 【问题描述】:我需要生成一个随机数。我找到了 Enum.random/1
函数,但它需要一个可枚举的值,例如数字列表或范围。
这是获得随机数的唯一方法吗?
【问题讨论】:
【参考方案1】:您可以从 Elixir 代码无缝调用Erlang's rand
module。
random_number = :rand.uniform(n)
将从 1 中给出一个随机数
【讨论】:
不要(意外)使用旧的和现已弃用的 Erlangrandom
模块。【参考方案2】:
&Enum.random/1
Enum.random(0..n)
会随机生成0 to n
你也可以发送列表作为参数
【讨论】:
我没有投反对票,但这可能是因为问题要求的方式与您建议的方式不同。 请注意,Enum.random/1
的文档在传递范围时将不会遍历整个范围,因此Enum.random(1..1000000000000)
和Enum.random(1..1000)
的执行时间是相同的。 【参考方案3】:
正如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])
【讨论】:
以上是关于如何在 Elixir 中生成随机数?的主要内容,如果未能解决你的问题,请参考以下文章