こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、10年目エンジニアです。
この記事では、 Rubyで配列を指定した要素数ごとにグループ化して処理を実施できるArray.each_sliceメソッドについて
- Array.each_sliceメソッドとは
- Array.each_sliceメソッドを使ったサンプルプログラム
と、この記事で丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Rubyのバージョン | 2.6.6 |
Rubyのインストールは、下の記事をご参考ください。
Array.each_sliceメソッドとは
Array.each_sliceメソッドとは、呼び出している配列を引数で指定した数でグループ化して繰り返し処理を行うメソッドです。
Array.each_sliceメソッドは使い方が
- パターン1:ブロックなしの場合
- パターン2:ブロックありの場合
の合計2パターンあります。
それぞれ解説します。
パターン1:ブロックなしの場合
ブロックなしの場合、呼び出している配列を引数で指定した数で区切った配列を返します。
使い方サンプルは以下です。
1 2 |
sample = ["aa", "bb", "cc", "dd", "ee"] result = sample.each_slice(2) |
変数resultには
1 2 3 |
[["aa", "bb"], ["cc", "dd"], ["ee"]] |
という配列が返されます。
上記サンプルの意味は以下になります。
パターン2:ブロックありの場合
ブロックありの場合は、グループ化した後、それぞれのグループに対して同じ処理を実施することができます。
パターン1と異なるのは、返り値がないことです。
使い方サンプルは以下です。
1 2 3 4 |
sample = ["aa", "bb", "cc", "dd", "ee"] sample.each_slice(2) do |str| puts "#{str}" end |
実行すると
1 2 3 |
["aa", "bb"] ["cc", "dd"] ["ee"] |
と、表示されます。
上記サンプルの意味は以下になります。
では、次の章で実際に使ってみます。
Array.each_sliceメソッドを解説するプログラムの概要
Array.each_sliceメソッドを解説するプログラムでは、整数型の配列を用意し
- パターン1:ブロックなしの場合
- パターン2:ブロックありの場合
それぞれで、Array.each_sliceメソッドを使います。
パターン1のブロックなしは、3つごとにグループ化し、中身を表示させます。
パターン2のブロックありは、2つごとにグループ化し、各グループの要素を2倍にして結果を表示させます。
Rubyサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# each_sliceメソッドサンプル array = [10, 1, 84, 3, 32, 27, 6] puts "確認で使用するリスト" puts "リスト:#{array}" puts # パターン1:ブロックなしの場合 puts "■パターン1:ブロックなしの場合" each_slice_result1 = array.each_slice(3) each_slice_result1.each_with_index do |parts, idx| puts "#{idx}番目:#{parts}" end puts # パターン2:ブロックありの場合 puts "■パターン2:ブロックありの場合" array.each_slice(2){ |parts| puts "計算前:#{parts}" result = parts.map{ |i| i * 2 } puts "計算後:#{result}" puts } |
上記のサンプルプログラムで使っている
- each_with_indexメソッド
- mapメソッド
それぞれのメソッドについては、以下の記事をご参考ください。
【Ruby】繰り返し処理で要素番号も扱うことができるeach_with_indexメソッドについて解説します
mapメソッドについて
【Ruby】配列の各要素に処理を実施し配列を返すmapメソッドについて解説します
実行結果
Rubyプログラムを実行するやり方は、以下の記事をご参考ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
確認で使用するリスト リスト:[10, 1, 84, 3, 32, 27, 6] ■パターン1:ブロックなしの場合 0番目:[10, 1, 84] 1番目:[3, 32, 27] 2番目:[6] ■パターン2:ブロックありの場合 計算前:[10, 1] 計算後:[20, 2] 計算前:[84, 3] 計算後:[168, 6] 計算前:[32, 27] 計算後:[64, 54] 計算前:[6] 計算後:[12] |
指定した通り、配列をグループ化でき、各グループに同じ処理が実施されていることが確認できました!
まとめ:Array.each_sliceメソッドを使ってみよう!
以上がArray.each_sliceメソッドについての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント