我想知道是否有更清洗器执行此操作的方法。基本上,我想要挑选一个随机从可变长度的数组元素。通常情况下,我会这样做︰

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

有的是更具可读性 / 容易更换的第二行吗?或者是做的最好办法。我想可以做myArray.shuffle.first,但我只看到#shuffle几分钟前等上,然而我没有实际使用。

2010-08-14 05:26:49
问题评论:

下面的最佳答案,但无序播放有关的常规点。我能想象得到完整的阵列会比只获取随机数,因此它不是很好的方向去更密集的 suffling。

回答:

只需使用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将接受数字参数为,如果您希望不同的样本数。

我应该知道将为我都有一个完美的答案 (因为大多数 Ruby 的问题这里浏览某个地方有您的输入)。我很高兴指出版本控制;我正在使用 1.9.2。apidock (mladen 的注释) 没有样本;既不会拼音 doc。在您看来,什么是 Ruby,更新为 1.9 的最佳参考?

在便笺,是我第一次选择了另一个答案之后,请更改"正确答案",正确吗?

谢谢:-)是的我们鼓励和 (请参阅meta.stackexchange.com/questions/19448/... )

我注意到您删除提到 1.8.8 的编辑。是在 1.8-头中仍然可用,因为 1.8.8 不会发生,只在编辑问题?

@Andrew︰ 是的我编辑我的答案因为 1.8.8 不会发生。它仍应在 1.8-头,但该分支是死:-(

myArray.sample(x)还可以帮助您获取 x 随机从数组的元素。

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

更新︰如果没有使用的 rails (活动支持) 将需要您自己定义的方法。一个更现代的视图,请参阅Marc André Lafortune 的回答此外可以定义数组 #sample 方法类似于,如果您正在使用 ruby 版本 < 1.9.1。

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

这不存在于 Ruby 1.9.3 (ruby-doc.org/core-1.9.3/Array.html)

从数组的随机项的随机编号

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

@fwilson 的随机集合中任意顺序的对象。也适用于测试不同组合或生成存根 (stub) 数据

为什么不扩展数组的类?[].total_random 是方式更酷。comeon 其拼音。其目标 !

myArray.sample

将返回 1 的随机值。

myArray.shuffle.sample

将每次返回一个不同的随机值。

无序播放是多余的。

从技术上讲答案仍然正确:)

从技术上讲此随机方法太正确stackoverflow.com/a/84747/2047418

从技术上讲,无序播放成本较高的性能。

内容来源于Stack Overflow How do I pick randomly from an array?
请输入您的翻译

How do I pick randomly from an array?

确认取消