我想知道是否有这样做的更清洁的方式。 基本上,我想从可变长度的阵列选择一个随机元素。 通常情况下,我会做这样的:
myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]
有什么是更可读/可简单更换第二行? 或者是,最好的方式做到这一点。 我想你可以做myArray.shuffle.first
,但我只看到#shuffle
几分钟前就这样,我还没有实际使用它。
只需使用Array#sample
:
[:foo, :bar].sample # => :foo, or :bar :-)
它是用Ruby 1.9.1+可用。 为了还能够使用Ruby的早期版本使用它,你可能require "backports/1.9.1/array/sample"
。
请注意,在Ruby中1.8.7存在下的不幸名称choice
; 它在后来的版本更名所以你不应该使用。
虽然在这种情况下没有用的, sample
接受的情况下,你想了许多不同的样本一些参数。
myArray.sample(x)
也可以帮助你获得X从数组随机元素。
从数组随机物品的随机数
def random_items(array)
array.sample(1 + rand(array.count))
end
可能的结果例子:
my_array = ["one", "two", "three"]
my_array.sample(1 + rand(my_array.count))
=> ["two", "three"]
=> ["one", "three", "two"]
=> ["two"]
arr = [1,9,5,2,4,9,5,8,7,9,0,8,2,7,5,8,0,2,9]
arr[rand(arr.count)]
这将从数组中返回一个随机元素。
如果您将使用下述线
arr[1+rand(arr.count)]
那么在某些情况下,它会返回0或零值。
该行下面提到
rand(number)
总是从0返回值与数1。
如果我们使用
1+rand(number)
然后它可以返回数和ARR [数字]不包含元件。