88
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby】eachとmapの違い

Posted at

Rubyで再帰的な処理をしたいときによく使われるeachとmapですが、初心者の方はつまづきやすいので、これらの使い分け方について簡単にまとめます。

each

eachは繰り返し処理をしたい時に使用します。
下の例では配列arrayの各要素の数字を2倍した結果を出力しています。

array = [1, 2, 3]
array.each do |item|
  p item * 2
end
2
4
6
=> [1, 2, 3]

mapとの違いを理解するうえで、戻り値がもとの配列[1, 2, 3]のままである点がポイントとなりますので覚えておいてください。

map

mapは繰り返し処理をした結果を配列として保持するときに使います。
下の例では配列arrayの各要素の数字を2倍した結果を配列resultに詰めています。

array = [1, 2, 3]
result = array.map do |item|
  item * 2
end
=>[2, 4, 6]

eachと違ってブロックの戻り値の結果が配列として返ってきていることがわかります。
もし同じ処理をeachで実装したい場合は下のようになりますが、mapで書くよりも記述量が増えてしまいますね。

array = [1, 2, 3]
result = []
array.each do |item|
  result << item * 2
end
=> [1, 2, 3]

まとめ

eachとmapの使い分けは、処理結果を使うか使わないかによって変わってきます。
処理結果を使いたい場合はeachではなくmapを積極的に使っていけると良いですね!

# 良い例
array.map do |item|
  item * 2
end

# 悪い例
result = []
array.each do |item|
  result << item * 2
end
  • eachは繰り返し処理に使う
  • mapは繰り返し処理の結果を配列にしたいときに使う
88
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?