« rails で Capistrano2.1 入門(2) ~ タスクを作る | メイン | rails でテンプレートのディレクトリを切り替える »

Array をシャッフルする

Arrayをシャッフルしようと下記のようなコードを書いてみました。


class Array

  def shuffle!
    size.downto(1) { |n| push delete_at(rand(n)) }
    self
  end

end

ところが、これを rails で動かそうとすると、ArgumentErrorが発生してなぜか動かない。

調べてみると、このファイルを発見。
activesupport-2.0.2/lib/active_support/core_ext/array/random_access.rb

ActiveSupportが、配列の要素にランダムにアクセスするメソッドを追加していました。
おいおい・・・

で、コードを下記のように変更。

class Array

  def shuffle!
    size.downto(1) { |n| push delete_at(Kernel.rand(n)) }
    self
  end

end

トラックバック

このエントリーのトラックバックURL:
http://i-am.web777.net/mt/mt-tb.cgi/41

コメントを投稿