【问题标题】:How to generate a random number in Elixir?如何在 Elixir 中生成随机数?
【发布时间】:2016-12-11 05:01:23
【问题描述】:

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

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

【问题讨论】:

    标签: random integer elixir


    【解决方案1】:

    您可以从 Elixir 代码无缝调用Erlang's rand module

    random_number = :rand.uniform(n)
    

    将从 1 中给出一个随机数

    【讨论】:

    • 不要(意外)使用旧的和现已弃用的 Erlang random 模块。
    【解决方案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 outthe 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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2018-10-08
      • 2010-11-14
      • 2012-11-06
      • 2011-09-15
      • 2012-07-25
      • 2014-07-23
      • 2019-01-14
      相关资源
      最近更新 更多