order by randと言ったらSQLでたまに話題にあがりますが、それとは関係なく、RubyのArrayをランダムに並び替え(シャッフル)たくなったので、自分用にコードを残しときます。
Fisher-Yatesアルゴリズムのつもりで書いてます。
改善点等ありましたらバシバシご指摘お願いします。
order_by_rand.rb
class Array
def order_by_rand
n = self.size
n.times do |i|
idx = rand(n-i)
self[idx], self[-(i+1)] = self[-(i+1)],self[idx]
end
self
end
end