なかだです。

At Fri, 1 Jul 2005 15:59:56 +0900,
Hideo Konami wrote in [ruby-list:40891]:
> 統計の無作為非復元抽出のシミュレーションのために,配列をシャッフル
> する方法を考えていて,次のような処理を思いつきました。これまで
> どんくさいやり方をしていたのに比べると(自分では)うまい方法だと
> 思ったのですが,もっとうまいやり方はないものでしょうか。お付き合い
> くださる方がおられましたら,よろしくお願いします。

結構定番の話題ですね。

> def shuffle(array)
>   s = []
>   while array.size > 0
>   p = rand(array.size)
>     s << array[p]
>     array.delete_at(p)
>   end

Array#delete_atは取り除いた要素を返すので、単純化できます。

    s << array.delete_at(rand(array.size)) until.array.empty?

>   return s
> end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦