【Ruby】デイリースクラムで使えるshuffleメソッド
DMM webcampの講座では、学びや進捗を共有するため、4~5人でデイリースクラム(昨日の進捗報告&今日の予定などを話し合うミーティング)を行います。
今日は誰から発表する? と毎回話し合うのは手間ですよね。
そこでプログラミングスクールっぽくプログラムで順番を決めてみましょう!
Rubyを使い、名前と番号を取り出すコードを作成します。
使用するのは 配列 、for 繰り返し処理 と shuffleメソッドです。
まずはそれぞれ解説します。
配列とは
Rubyの配列は、複数の要素を順番に格納するためのデータ構造です。
配列を使うことで、関連するデータを一つのまとまりとして扱うことができます。
例えば、果物のリストを配列で表す場合、次のようになります。
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
上記の例では、fruits
という配列に4つの要素が含まれています。それぞれの要素は、ダブルクォーテーションで囲まれた文字列です。
配列の要素は、0から始まるインデックス番号でアクセスすることができます。例えば、fruits
配列の2番目の要素"オレンジ"にアクセスするには、以下のようにします。
puts fruits[2]
配列の長さ(要素の数)は、length
メソッドやsize
メソッドを使って取得することができます。
puts fruits.length
この場合、4が表示されます。
forループとは
forループは、同じ処理を繰り返すための仕組みです。例えば、果物のリストを順番に表示する場合、forループを使えば簡単です。
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
for fruits in fruits
puts fruit
end
上記のコードではfruits
という配列の要素を順番に取り出して、それぞれの要素を表示しています。
具体的な処理の流れは以下の通りです。
- 最初の要素"りんご"が
fruit
という変数に代入されて処理が実行される。 -
puts fruit
によって、fruit
の値が表示される。 - 次の要素"バナナ"が
fruit
に代入されて処理が実行される。 - 再び
puts fruit
によって、新たなfruit
の値が表示される。 - 上記のステップが配列の要素の数だけ繰り返される。
結果として、以下のように果物のリストが順番に表示されます。
りんご
バナナ
オレンジ
ぶどう
shuffleメソッド
shuffleメソッドは、配列の要素をランダムに並び替えるためのメソッドです。
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
shuffled_fruits = fruits.shuffle
puts shuffled_fruits
fruits
という配列に4つの果物が入っています。これらの果物をshuffle
メソッドを使ってランダムに並び替え、shuffled_fruits
に代入しています。その後、shuffled_fruits
を表示しています。
実行結果は次の通りです。
オレンジ
ぶどう
バナナ
りんご
果物の名前がランダムに並び替えられた結果なので、毎回実行すると、果物の順番が変わります。
名前と番号を取り出すコード
それでは、今までの知識を応用し、ランダムに名前を取り出し、順番を決めるコードを作成します。
names = ["A", "B", "C", "D", "E"]
result = names.shuffle
for i in 0...result.length
puts "#{i+1}: #{result[i]}"
end
以下にコードの説明をします。
names = ["A", "B", "C", "D", "E"]
result = names.shuffle
names
という変数に5つの名前が入った配列を定義します。
次に、result
という変数に、names
の要素をシャッフルした結果を代入します。
つまり、5つの名前がランダムな順番で並び替えられます。
for i in 0...result.length
puts "#{i+1}: #{result[i]}"
end
続いて、for
ループを使って、result
の要素を順番に表示させます。
i
は、ループ内で使用される変数です。これは「ループ内で使うカウンター変数」と呼ばれるもので、ループが実行するたびに値が増えていきます。
0...result.length
という部分は、ループの範囲を指定しています。
ループは0から始まり、result
配列の要素の数(今回は5)まで1ずつ増加しながら繰り返します。
ここで注意するのは、...
を使う点です。これは範囲指定のための演算子で、最後の値は含まれないことを意味します。
例えば、以下のような範囲指定があるとします。
range = 1...5
この範囲指定は、1から始まり5未満の範囲を表します。つまり、1,2,3,4の値が含まれますが、5は含まれません。
以下のコードでは、範囲指定を使ってループを回しています。
for i in 1...5
puts i
end
このコードを実行すると、1から4までの値が順番に表示されます。
1
2
3
4
5は範囲指定に含まれていないため、ループの対象外となります。
配列のインデックスは0から始まるので、最後の値を含まない方が、インデックスとの整合性が取りやすくなります。
ループの本体では、puts
メソッドを使って文字列を表示しています。
#{i+1}:
は表示する順番を表し、#{result[i]}
はresult
配列のi
番目の要素を表します。
ここでi+1
をしているのは、表示する順番を1から始めるためです。
つまり実行する度に、表示される順番が以下のようにランダムに表示されます。
1: C
2: A
3: E
4: B
5: D
ループが繰り返されるたびに、カウンター変数i
の値が増えていき、次の要素が表示されます。
まとめ
今回は、配列とforとshuffleを応用しコードを作成しました。
今回紹介した方法以外にも、同じような出力ができるコードが作れます。
もしこんな方法あったよ等ありましたらぜひ共有いただけたら嬉しいです。
同じスクール生がいましたら、今回のコードを使ってみてくださいね!
最後まで読んでいただき、ありがとうございました。
Discussion