Ruby の .each
メソッド入門
Rubyで最も多く使われる繰り返し処理メソッドが .each
です。Array
やHash
、Range
、Enumerator
といったコレクションから要素を順次取り出し、ブロック内で任意の処理を実行します。
for
文よりも可読性が高く、Rubyコミュニティでも圧倒的に使用頻度が高い点が特徴です。
.each
メソッドとは
- 繰り返し処理用のメソッド
- コレクション(
Array
、Hash
、Range
、Enumerator
など)から要素を順次取り出し、ブロックを実行 -
for
文よりも直感的で、Rubyらしい書き方 - 「要素の数だけブロックを繰り返す」というイメージ
基本的な記法
コレクション.each do |要素|
# 要素に対する処理
end
具体例
[1, 2, 3].each do |n|
puts n * 2
end
# 実行結果
2
4
6
⚠️戻り値に関する注意
.each
は「元のコレクション自身」を返します。要素を変換して別の配列を作りたい場合はmap
を使い分けましょう。
arr = [1, 2, 3, 4]
arrx2 = arr.map { |n| n * 2 }
arrxx2 = arr.each { |n| n * 2 }
p arrx2 # => [2, 4, 6, 8]
p arrxx2 # => [1, 2, 3, 4]
map はブロックの戻り値を集めた新しい配列を返す
each は元の配列を返し、ブロック内の戻り値は破棄される
まとめ
-
.each
メソッドは要素を順番に取り出してブロックを実行する基本メソッド - 戻り値は常にレシーバーのまま
- 要素変換が必要な場合は map と使い分ける
まとめてみて
- 自分の勝手な思い込みとして、
.each
メソッドって、(1..5)
みたいな順列にしか使わないイメージが強くて、上手く利用できていない。 - 例えば、テストの点数
[40, 54, 70, 95]
のような配列に使うケースの方が多いと思うから、この固定観念を打破したい。