如何在Ruby中随机sorting(争夺)一个数组?
我想有我的数组项目炒。 像这样的东西:
[1,2,3,4].scramble => [2,1,3,4] [1,2,3,4].scramble => [3,1,2,4] [1,2,3,4].scramble => [4,2,3,1]
随机地等等
现在内置:
[1,2,3,4].shuffle => [2, 1, 3, 4] [1,2,3,4].shuffle => [1, 3, 2, 4]
对于ruby1.8.6(其中没有内置shuffle):
array.sort_by { rand }
对于ruby1.8.6作为sepp2k的例子,但你仍然要使用“洗牌”的方法。
class Array def shuffle sort_by { rand } end end [1,2,3,4].shuffle #=> [2,4,3,1] [1,2,3,4].shuffle #=> [4,2,1,3]
干杯
来自Backports Gem的代码仅用于Ruby 1.8.6的数组。 内置Ruby 1.8.7或更高版本。
class Array # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html] def shuffle dup.shuffle! end unless method_defined? :shuffle # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html] def shuffle! size.times do |i| r = i + Kernel.rand(size - i) self[i], self[r] = self[r], self[i] end self end unless method_defined? :shuffle! end
Ruby Facets扩展库有一个Random
模块,它提供了有用的方法,包括shuffle
和shuffle!
到一堆核心类,包括Array
, Hash
和String
。
只要小心,如果你使用的Rails,因为我经历了一些讨厌的冲突,monkeypatching与Rails的冲突… …