从数组中挑选随机元素

时间:2011-12-19 18:10:21

标签: ruby

  

可能重复:
  How do I pick randomly from an array?

确保不选择不存在的项目的适当方法是什么?

 icons = %w[asterisk star arrow]
 random = rand(icons.length)

icons = %w[asterisk star arrow]
random = rand(icons.length -1)

3 个答案:

答案 0 :(得分:21)

如何使用Array#sample

[1, 2, 3].sample(1)
  

示例→obj
  样本(随机:rng)→obj
  sample(n)→new_ary
  sample(n,random:rng)→new_ary
  从数组中选择一个随机元素或n个随机元素。通过在数组中使用随机和唯一索引来选择元素,以确保元素不会重复,除非数组已包含重复元素。如果数组为空,则第一个表单返回nil,第二个表单返回一个空数组   如果给出rng,它将用作随机数生成器。

(假设你对元素而不是索引更感兴趣)

答案 1 :(得分:1)

这将是第一个。

icons = %w[asterisk star arrow]
random = rand(icons.length)

如文件中所述:

  

当参数是Integer或Bignum时,它返回一个大于或等于零且小于参数的随机整数

因此,如果数组由10个元素(0 ... 9)组成,则rand(10)应返回0到9之间的数字。

来源:http://www.ruby-doc.org/core-1.9.3/Random.html

答案 2 :(得分:0)

icons = %w[asterisk star arrow]
puts icons.sample