- blogs:
- cles::blog
« Mercurialのインストール :: 自分のルーツはどこにあるか? »
2008/09/15

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 を使ってログインすることができます。
« Mercurialのインストール :: 自分のルーツはどこにあるか? »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112056)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110685)
3 . 年次の人間ドックへ(110308)
4 . 2023 年分の確定申告完了!(1つめ)(109857)
5 . 三菱鉛筆がラミーを買収(109758)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110685)
3 . 年次の人間ドックへ(110308)
4 . 2023 年分の確定申告完了!(1つめ)(109857)
5 . 三菱鉛筆がラミーを買収(109758)
cles::blogについて
Referrers