问题

我想知道是否有一个更干净的方式这样做.基本上,我想从一个可变长度的数组中选择一个随机元素.通常,我会这样做:

myArray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ]
item = myArray[rand(myarray.length)]

有什么东西更容易阅读/更简单的替换第二行?或者说是最好的办法.我想你可以做 myArray.shuffle.first ,但我只看到 #shuffle 几分钟前在SO,我还没有实际使用它.



解决方法

只需使用 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 接受一个数字参数,以防您需要多个不同的样本.




相关问题推荐