我基本上都在寻找相当于Ruby的Elixir Array#sample.可以让我这样做的东西:
list = [1,2,3,4,5,6,7]
sample(list)
#=> 4
sample(list, 3)
#=> [6, 2, 5]
我也没有在Elixir List Docs中找到任何内容.
She*_*yar 52
正如JoséValim在他的回答中Elixir 1.1所说,你现在可以使用这些方法从列表中获取随机元素:
Enum.random/1 - 获取单个随机元素Enum.take_random/2 - 获取多个随机元素例:
Enum.random(list)                         #=> 4
Enum.take_random(list, 3)                 #=> [3, 9, 1]
Enum.take_random(list, 1)                 #=> [7]
记得先打个电话:random.seed(:erlang.now)!
我仍然无法找到一种"正确"和"神奇"的方式来做到这一点,但这是我能做到的最好的方法:
获取单个随机元素:
list |> Enum.shuffle |> hd
#=> 4
注意:如果list为空,则会出现异常
获取多个随机元素:
list |> Enum.shuffle |> Enum.take(3)
#=> [7, 1, 5]
Jos*_*lim 11
Elixir 1.0中没有这样的功能,因此您需要自己实现它,如其他解决方案所述.但是,Enum.random/1随着Elixir v1.1的到来:https://hexdocs.pm/elixir/Enum.html#random/1
小智 5
另一种方法(仅对一个元素进行采样)是:
list |> Enum.at(:random.uniform(length(list)) - 1)
如果您使用足够大的列表来改变整个列表可能会对性能产生影响,那么可能优于其他方法.
Gazler关于使用的评论:random.seed(:erlang.now)仍然适用.