如何在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模块,它提供了有用的方法,包括shuffleshuffle! 到一堆核心类,包括ArrayHashString

只要小心,如果你使用的Rails,因为我经历了一些讨厌的冲突,monkeypatching与Rails的冲突… …