BLOGTIMES
2008/09/15

Rubyで配列をシャッフルする

  ruby 
このエントリーをはてなブックマークに追加

PHPで配列をシャッフルするにはshuffle()を使えばできるので、Rubyで該当するメソッドがないかとArrayのリファレンスをさらってみたのですが、要素をランダムに並び替えるメソッドはないようです。ということで、ruby-listの過去ログを検索したところビンゴなものを発見。

[ruby-list:43811] Re: 配列についての質問

> 配列の要素の順番を、ごちゃごちゃにするメソッドが
> 欲しくって次の code を書きました。(仮に unsort と
> 言う名前にした)

sort_byとrandの連携で。

a=[1,2,3,4,5] # = [1, 2, 3, 4, 5] a.sort_by{rand} # = [3, 1, 5, 2, 4]

sort_byを使うというのはちょっと死角でした。sortではなくてsort_byを使っているのは、sort_byの説明から読み取るに、sortが比較の度にrandを呼び出すのに対して、sort_byは要素の数だけrandを実行してから、求まった値を比較をするので、後者の方が偏りなくソートができるということなんだろうと思います。

難しいことは脇に置いといて、sort_by{rand}をイディオムとして覚えておくと良さそうです。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2730
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン