Rubyには配列の要素をランダムで取得・入れ替えすることができる便利なメソッドが用意されています。
「配列の要素の中からランダムで値を取得したい」
「配列の要素をランダムで並び替えたい」
といった悩みを抱えている方に向けて、この記事では以下の内容について解説していきます。
・配列をランダムに取得・入れ替えするには
・sampleメソッドの使い方
・shuffleメソッドの使い方
配列をランダムで取得できるsample、shuffleメソッドについてわかりやすく解説していますので、ぜひ参考にしてください!
それではいってみましょう!
配列をランダムに取得・入れ替えするには
配列にはさまざまなメソッドが用意されていますが、配列の内容をランダムに取得したり、ランダムに入れ替えを行うにはsampleメソッド、shuffleメソッドを使用します。
配列をランダムで取得する処理は、すごろくやカードゲームなどのゲームアプリでよく使われます。
これらのメソッドを使うことで、わざわざランダムで取得する処理を実装しなくても、メソッドを使って簡単に取得できます。
要素をランダムに取得するsampleメソッド
sampleメソッドは、配列の要素1つをランダムに取得します。
sampleメソッドの書き方:
配列.sample 配列.sample(num)
配列が空だった場合はnilを返します。
引数を指定しない場合は要素を1つランダムで取得します。
引数を指定した場合は指定した数だけ要素をランダムで取得します。
要素をランダムに入れ替えるshuffleメソッド
shuffleメソッドは配列の要素をランダムに入れ替えて取得します。
shuffleメソッドの書き方:
array.shuffle array.shuffle!
配列が空だった場合はnilを返します。
「!」を付加した破壊的メソッドの場合は配列自信を入れ替えた値に変更されます。
sampleメソッドの使い方
引数なしの場合
では実際にsampleメソッドを使ってみましょう。
以下のサンプルをご覧ください。
fruits = ["apple", "orange", "melon", "banana", "pineapple"] p fruits.sample
実行結果:
"banana"
このようにランダムな要素が取得できました!
プログラムを実行するたびにランダムで要素が取得されます。
引数ありの場合
引数ありの場合のプログラムを見てみましょう。
fruits = ["apple", "orange", "melon", "banana", "pineapple"] p fruits.sample(2) p fruits.sample(4) p fruits.sample(8)
実行結果:
["banana", "apple"] ["orange", "melon", "apple", "banana"] ["pineapple", "melon", "banana", "apple", "orange"]
このように引数で指定した要素分ランダムで取得することができました!
など、引数が配列の要素数よりも大きい場合は配列の全要素分ランダムで取得できます。
shuffleメソッドの使い方
続いてshuffleメソッドの使い方について見ていきましょう。
以下のサンプルをご覧ください。
fruits = ["apple", "orange", "melon", "banana", "pineapple"] p fruits.shuffle
実行結果:
["melon", "pineapple", "apple", "orange", "banana"]
実行結果のとおり要素をランダムで並べ替えた配列を取得することができました!
shuffleメソッドを使えば、このように簡単にランダムに並び替えた要素が取得できることがわかりますね!
また、破壊的メソッドshuffle!を使えば、元の配列自信の並び替えを行います。
fruits = ["apple", "orange", "melon", "banana", "pineapple"] fruits.shuffle! p fruits
実行結果:
["banana", "melon", "apple", "orange", "pineapple"]
配列についてもっとよく知りたい方へ
配列の基礎からさまざまな使い方については、以下の記事でも詳しく解説していますのでぜひ参考にしてください!
まとめ
ここでは、配列の要素をランダムで取得・並び替えできるsample、shuffleメソッドについて解説しました。
- 配列をランダムに取得・入れ替えするには
- sampleメソッドの使い方
- shuffleメソッドの使い方
とくにゲームなどのアプリケーションで、ランダムで値を取得する処理はよく使われますので、使い方については理解しておきましょう。
もし、sample・shuffleメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!