Rubyの配列のシャッフル

http://kaosf.kirara.st/sb/log/eid239.html

require 'benchmark'

n = 1000_000
a = (0..n).to_a
b = (0..n).to_a

Benchmark.bm do |x|
  x.report { a.sort_by{ rand } }
  x.report { b.shuffle }
end

ruby 1.9.1

       user     system      total        real
   6.485000   0.000000   6.485000 (  6.593750)
   0.203000   0.000000   0.203000 (  0.203125)

ruby 1.8.7

       user     system      total        real
   6.328000   0.031000   6.359000 (  6.562000)
   0.172000   0.000000   0.172000 (  0.187000)

これだけ大きな配列をシャッフルするのかというのがあるけど,それにしてもsort_by { rand }は遅い.1.8.6以下を使い続けないと行けない理由がそれほどあるとは思えないので,素直にshuffleをつかいませう.