😊

Rubyのeachとmapの違いと使いどころ

2024/04/17に公開

Rubyでeachとmapは頻繁に使用されるメソッドですが、これらは似ているようで使い方に大きな違いがあります。この記事ではそれらの基本的な使い方、違い、および便利な使い方について初心者にもわかりやすく解説します。

each

eachを使用するとコレクションの各要素に対して指定したブロック(処理)が実行されます。重要な点は、each自体はコレクションを変更せず、元のコレクションをそのまま返すことです。

numbers = [1, 2, 3, 4, 5]
numbers.each do |n|
  puts number * 2
end
# 出力:
# 2
# 4
# 6
# 8
# 10
=> [1, 2, 3, 4, 5]

このコードでは、各要素を2倍にして出力していますが、numbers配列自体は変更されません。

map

mapもeachと同様にコレクションの各要素に対してブロックの内容を適用します。しかし、mapは各要素に対して適用された結果を新しい配列として返します。

numbers = [1, 2, 3, 4, 5]
doubled_numbers = numbers.map do |number|
  number * 2
end
p doubled_numbers
# => [2, 4, 6, 8, 10]

このコードでは、元のnumbers配列は変更せず、新しい配列doubled_numbersが作成されます。

便利な使い方

データセットから特定の属性だけを抜き出したい場合など、mapを使うと便利です。

users = [
  { name: "Ohta", age: 25 },
  { name: "Sato", age: 28 }
]
names = users.map { |user| user[:name] }
p names
=> ["Ohta", "Sato"]

このコードでは、ユーザーのリストから名前だけを抜き出して新しい配列を作成しています。

まとめ

Rubyでの効率的なコードを書くためには、eachとmapの違いを理解し、適切な場面で正しく使い分けることが重要です。この記事がそれぞれのメソッドの使い方を理解し、より良いRubyプログラマーになる手助けとなれば幸いです。

参考

https://docs.ruby-lang.org/ja/latest/method/Array/i/each.html
https://docs.ruby-lang.org/ja/latest/method/Array/i/map.html

Discussion