目次
開発環境
- Ruby version: ruby 3.1.2
Rubyのeachメソッドとは
Rubyのeachメソッドとは、配列の要素やハッシュの要素、範囲オブジェクトなどで用意されているメソッドです。
オブジェクトに含まれている要素を順番に取り出し、取り出した要素に対して繰り返し処理を行うことができるメソッドです。
公式リファレンス:https://docs.ruby-lang.org/ja/latest/class/Array.html#I_EACH
Rubyのeachメソッドの書き方
Rubyのeachメソッドは下記のように記述します。
1 2 3 | オブジェクト.each do |変数| 実行する処理 end |
オブジェクトに含まれる要素を順番に取得して変数に格納し、「do」から「end」までの処理を実行します。
eachメソッドはオブジェクトに含まれる要素が無くなるまで繰り返し行われます。
また、Rubyのeachメソッドは下記のように記述することもできます。
1 2 3 | オブジェクト.each {|変数| 実行する処理 } |
基本的には「do」「end」で記述されることが一般的ですが、ビュー側など1行で記述したい場合は「{}」で記述することもあります。
Rubyのeachメソッドの使い方
Rubyのeachメソッドのよくあるパターンをサンプルコードを用いて使い方の解説をしていきます。
eachメソッドで範囲オブジェクトを繰り返し処理するパターン
範囲オブジェクトは範囲の開始位置と、終了位置で定義できるオブジェクトの事です。
例えば、1~10の数値や、a~zのような文字が範囲オブジェクトです。
1 2 3 4 5 6 7 8 | numbers = (1..100) total = 0 numbers.each do |number| total += number end puts total |
上記では「numbers」に定義された1から100の値が順番に取り出されて「number」という変数に格納された後、「do」から「end」までの処理が実行されます。
「total」という変数に対してnumberを順番に足し算しており、合計値である「total」の最終結果を出力しています。
※足し算や引き算などの演算子で変数を使用する場合、変数に対して値が定義されていない場合はエラーになりますので、注意してください。
eachメソッドで配列を繰り返し処理するパターン
配列は任意の同じ種類のオブジェクトを要素として持つことができるデータの事です。
1 2 3 4 5 | users = ["山田","佐藤","鈴木","田中"] users.each do |user| puts user end |
上記では「users」に定義された配列が順番に取り出されて「user」という変数に格納された後、「do」から「end」までの処理が実行されます。
eachメソッドでハッシュを繰り返し処理するパターン
ハッシュは任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができるデータの事です。 ※連想配列とも呼ばれています。
1 2 3 4 5 | users = {name: "山田", age: 25, sex: "男性"} users.each do |key,value| puts "#{key}は#{value}です。" end |
上記では「users」に定義されたハッシュが順番に取り出されて「key」という変数にオブジェクトのキー、「value」という変数にオブジェクトの値が格納された後、「do」から「end」までの処理が実行されます。
eachメソッドで配列の中のハッシュを繰り返し処理するパターン
同じ種類のオブジェクトを要素として持つことができる配列のなかに、キーと値が関連付けられたハッシュのパターンがあります。
1 2 3 4 5 | users = [{name: "山田", age: 25 },{name: "佐藤", age: 20 },{name: "鈴木", age: 30 },{name: "田中", age: 31 }] users.each do |user| puts "#{user[:name]}は#{user[:age]}歳です。" end |
上記では「users」に定義された配列が順番に取り出されて「user」という変数に格納された後、「do」から「end」までの処理が実行されます。
また、「user」という変数で取り出されたハッシュから値を取り出したい場合は、関連づけられたキーを「変数[:キー]」で指定することでセットになっている値を取得できます。
eachメソッドで多次元配列を繰り返し処理するパターン
多次元配列は配列の中に配列が入っているデータのことです。 ※二次元配列などとも呼ばれています。
1 2 3 4 5 | users = [["山田", 25],["佐藤", 20],["鈴木", 30],["田中", 31]] users.each do |name,age| puts "#{name}は#{age}歳です。" end |
上記では「users」に定義された多次元配列が順番に取り出されて「name」という変数にインデックス0、「age」という変数にインデックス1が可能された後、「do」から「end」までの処理が実行されます。
おわりに
Rubyのeachメソッドの使い方を解説してきました。
どのようなプログラミング言語でも言えますが、どのようなパラーメータでデータが送られているかによって適切な処理が変わります。
Rubyには繰り返し処理を行うメソッドは複数用意されていますが、eachメソッドは使用頻度がかなり高いため、是非、参考にしてください。