Ruby配列のランダム化を完全解説!shuffle・sample・permutation・combinationを初心者向けに理解しよう
生徒
「Rubyで配列の中身をランダムに並び替えたり、くじ引きみたいに選んだりできますか?」
先生
「できますよ。Rubyの配列には、shuffleやsampleといった便利な機能があります。」
生徒
「順番の組み合わせを全部出すこともできますか?」
先生
「permutationやcombinationを使えば、順列や組み合わせも簡単に扱えます。」
1. 配列のランダム化とは?
ランダム化とは、順番を決めずにバラバラにすることです。トランプをシャッフルしたり、 箱の中から紙を一枚引いたりするイメージです。Rubyでは配列を使うことで、こうした動きを プログラムで簡単に再現できます。
Rubyの配列(Array)は、データを順番に並べて保存する箱のようなものです。 この順番をランダムに変えたり、一部を取り出したりすることで、 ゲーム、抽選、テストデータ作成など、さまざまな場面で活躍します。
2. shuffle:配列をシャッフルする
shuffleは、配列の中身をランダムな順番に並び替えるメソッドです。
カードをよく混ぜる動作を想像すると分かりやすいです。
元の配列は変えずに、新しい配列を作るのが特徴です。
cards = ["ハート", "ダイヤ", "クラブ", "スペード"]
shuffled = cards.shuffle
puts shuffled
ランダムな順番で表示される
shuffleは非破壊的メソッドです。 つまり、元の配列はそのまま残ります。 元の順番も必要なときに安心して使えます。
3. sample:ランダムに要素を取り出す
sampleは、配列の中からランダムに一つ、または複数の要素を取り出します。
くじ引きや抽選をイメージすると理解しやすいです。
names = ["田中", "佐藤", "鈴木", "高橋"]
puts names.sample
名前が一つ表示される
数を指定すると、複数選ぶこともできます。 このときも、元の配列は変わりません。 初心者の方でも安全に使える便利なメソッドです。
4. permutation:順番を重視した並びを作る
permutation(順列)とは、順番を区別した並び方のことです。 例えば「A→B」と「B→A」は別物として扱います。 Rubyでは配列に対して簡単に順列を作れます。
items = [1, 2, 3]
items.permutation(2) do |p|
p p
end
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]
順番が変わるだけで結果が増えるため、 データ量が一気に多くなる点には注意が必要です。 小さな配列で使うのが基本です。
5. combination:順番を気にしない組み合わせ
combination(組み合わせ)は、順番を区別しません。 「AとB」と「BとA」は同じものとして扱います。 宝くじの番号選びを想像すると分かりやすいです。
numbers = [1, 2, 3]
numbers.combination(2) do |c|
p c
end
[1, 2]
[1, 3]
[2, 3]
permutationよりも結果が少なくなり、 現実の選択肢に近い形でデータを扱えます。 ランダム処理と一緒に覚えておくと便利です。
6. ランダム系メソッドを使うときの注意点
ランダム処理は毎回結果が変わるため、 テストや確認のときに戸惑うことがあります。 また、permutationやcombinationは数が増えやすく、 パソコンに負担がかかる場合があります。
初心者のうちは、小さな配列で動きを確認しながら、 shuffleやsampleから慣れていくと安心です。 Rubyの配列操作に慣れることで、 プログラムの理解が一気に深まります。