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は繰り返し処理の結果を配列にしたいときに使う