ruby - 如何从数组中随机选择?

  显示原文与译文双语对照的内容

我想知道是否有更简洁的方法来做这个。 基本上,我想从可变长度数组中挑选一个随机元素。 通常情况下,我这样做:


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 接受一个数字参数,以防你需要一些不同的样本。

就个人而言,我更喜欢方法 item = myArray.random_element

ruby 之前更新: 1.8.7自己,你就得对该方法。 于更现代的相关view,看到 Marc-André回答的Lafortune.


class Array
 def random_element
 self[rand(length)]
 end
end

数组中随机项目的随机数


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"]

...