Ruby - 以随机顺序返回数组
在 Ruby 中以随机顺序返回数组的最简单方法是什么? 任何可以在 IRB 会话中使用的简短内容,例如
[1,2,3,4,5].random()
# or
random_sort([1,2,3,4,5])
What is the easiest way to return an array in random order in Ruby?
Anything that is nice and short that can be used in an IRB session like
[1,2,3,4,5].random()
# or
random_sort([1,2,3,4,5])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
数组.shuffle
array.shuffle
如果您没有 [].shuffle,[].sort_by{rand} 的工作方式如 sepp2k 所指出的那样。 .sort_by 出于排序目的暂时用某些元素替换每个元素,在本例中是随机数。
[].sort{rand-0.5} 但是,无法正确洗牌。如果您对数组进行随机排序,某些语言(例如某些 Javascript 实现)将无法正确地对数组进行洗牌,有时会产生相当公开的后果。
JS 分析(带图!): http://www .robweir.com/blog/2010/02/microsoft-random-browser-ballot.html
Ruby 也不例外!它也有同样的问题。 :)
=>
每个元素应该在每个位置出现大约 20000 次。 [].sort_by(rand) 给出了更好的结果。
=>
同样对于 [].shuffle (这可能是最快的)
If you don't have [].shuffle, [].sort_by{rand} works as pointed out by sepp2k. .sort_by temporarily replaces each element by something for the purpose of sorting, in this case, a random number.
[].sort{rand-0.5} however, won't properly shuffle. Some languages (e.g. some Javascript implementations) don't properly shuffle arrays if you do a random sort on the array, with sometimes rather public consequences.
JS Analysis (with graphs!): http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html
Ruby is no different! It has the same problem. :)
=>
Each element should occur in each position about 20000 times. [].sort_by(rand) gives much better results.
=>
Similarly for [].shuffle (which is probably fastest)
这又如何呢?
Enumerable、Array、Hash 和 String 的辅助方法
让您可以选择随机项目或打乱项目顺序。
http:// /raa.ruby-lang.org/project/rand/
What about this?
Helper methods for Enumerable, Array, Hash, and String
that let you pick a random item or shuffle the order of items.
http://raa.ruby-lang.org/project/rand/