【Ruby】eachメソッドの書き方と使い方の基本

作成日: 更新日:

開発環境

  • 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オブジェクト.each do |変数|
2    実行する処理
3end

オブジェクトに含まれる要素を順番に取得して変数に格納し、「do」から「end」までの処理を実行します。 eachメソッドはオブジェクトに含まれる要素が無くなるまで繰り返し行われます。 また、Rubyのeachメソッドは下記のように記述することもできます。

1オブジェクト.each {|変数|
2    実行する処理
3}

基本的には「do」「end」で記述されることが一般的ですが、ビュー側など1行で記述したい場合は「{}」で記述することもあります。

Rubyのeachメソッドの使い方

Rubyのeachメソッドのよくあるパターンをサンプルコードを用いて使い方の解説をしていきます。

eachメソッドで範囲オブジェクトを繰り返し処理するパターン

範囲オブジェクトは範囲の開始位置と、終了位置で定義できるオブジェクトの事です。 例えば、1~10の数値や、a~zのような文字が範囲オブジェクトです。

1numbers = (1..100)
2total = 0
3
4numbers.each do |number|
5    total += number
6end
7
8puts total

上記では「numbers」に定義された1から100の値が順番に取り出されて「number」という変数に格納された後、「do」から「end」までの処理が実行されます。 「total」という変数に対してnumberを順番に足し算しており、合計値である「total」の最終結果を出力しています。 ※足し算や引き算などの演算子で変数を使用する場合、変数に対して値が定義されていない場合はエラーになりますので、注意してください。

eachメソッドで配列を繰り返し処理するパターン

配列は任意の同じ種類のオブジェクトを要素として持つことができるデータの事です。

1users = ["山田","佐藤","鈴木","田中"]
2
3users.each do |user|
4    puts user
5end

上記では「users」に定義された配列が順番に取り出されて「user」という変数に格納された後、「do」から「end」までの処理が実行されます。

eachメソッドでハッシュを繰り返し処理するパターン

ハッシュは任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連づけを行うことができるデータの事です。 ※連想配列とも呼ばれています。

1users = {name: "山田", age: 25, sex: "男性"}
2
3users.each do |key,value|
4    puts "#{key}#{value}です。"
5end

上記では「users」に定義されたハッシュが順番に取り出されて「key」という変数にオブジェクトのキー、「value」という変数にオブジェクトの値が格納された後、「do」から「end」までの処理が実行されます。

eachメソッドで配列の中のハッシュを繰り返し処理するパターン

同じ種類のオブジェクトを要素として持つことができる配列のなかに、キーと値が関連付けられたハッシュのパターンがあります。

1users = [{name: "山田", age: 25 },{name: "佐藤", age: 20 },{name: "鈴木", age: 30 },{name: "田中", age: 31 }]
2
3users.each do |user|
4    puts "#{user[:name]}#{user[:age]}歳です。"
5end

上記では「users」に定義された配列が順番に取り出されて「user」という変数に格納された後、「do」から「end」までの処理が実行されます。 また、「user」という変数で取り出されたハッシュから値を取り出したい場合は、関連づけられたキーを「変数[:キー]」で指定することでセットになっている値を取得できます。

eachメソッドで多次元配列を繰り返し処理するパターン

多次元配列は配列の中に配列が入っているデータのことです。 ※二次元配列などとも呼ばれています。

1users = [["山田", 25],["佐藤", 20],["鈴木", 30],["田中", 31]]
2
3users.each do |name,age|
4    puts "#{name}#{age}歳です。"
5end

上記では「users」に定義された多次元配列が順番に取り出されて「name」という変数にインデックス0、「age」という変数にインデックス1が可能された後、「do」から「end」までの処理が実行されます。

おわりに

Rubyのeachメソッドの使い方を解説してきました。 どのようなプログラミング言語でも言えますが、どのようなパラーメータでデータが送られているかによって適切な処理が変わります。 Rubyには繰り返し処理を行うメソッドは複数用意されていますが、eachメソッドは使用頻度がかなり高いため、是非、参考にしてください。

【Ruby】eachメソッドの書き方と使い方の基本 | いっしー@Webエンジニア