配列の内容をシャッフル

class Array
  def swap!(a,b)
    self[a], self[b] = self[b], self[a]
    self
  end

  def shuffle!()
    (1..size-1).each {|n| swap!( n, rand(n+1))}
    self
  end

end
a = (1..10).map {|x| x}
p a.shuffle!
#=> [6, 8, 7, 3, 10, 9, 4, 5, 2, 1]

このコードはcくさいな.もっとruby風の書き方がありそうな.
1.9からshuffle!が追加されるの?


from 配列の中身をランダムに並び替える - gan2 の Ruby 勉強日記

a2 = a.sort_by{|i| rand }

なるほど.こんな方法もあるのか.
(追記:このコードだとrandが偶然にも同じ値を返すと偏りが発生するらしい)