Rubyのmap/map!メソッドの書き方を現役エンジニアが解説【初心者向け】

初心者向けにRubyのmap/map!メソッドの書き方について現役エンジニアが解説しています。配列の各要素に対して処理を行いたい場合に全ての要素を展開しても良いのですが、mapやeachメソッドなどの便利なメソッドを使った方が良いです。それぞれの違いも見ていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

Rubyのmap/map!メソッドの書き方について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。
 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Rubyのmap/map!メソッドの書き方について詳しく説明していくね!

大石ゆかり

お願いします!

 

map/map!メソッドとは

map/map!は、配列の要素の数だけブロック内の処理を実行し、作成された配列を返すメソッドです。

mapは、元となった配列を変更しないのに対し、map!は元の配列も書き換えます。いわゆる破壊的メソッドです。

eachは戻り値が元の配列ですが、mapはブロック処理をした後の値を集めた配列を戻り値に持ちます。

そのため、配列を元に新たな配列を作成する場合などにはmap/map!を、それ以外の繰り返しの処理にはeachを使うのが良いでしょう。

 

map/map!メソッドの書き方

map/map!は以下のように使用します。

 

配列.map{|ブロック引数|
  処理
}

 
戻り値が新しく作成された配列だということに注意しましょう。
 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは実際に書いてみましょう。比較として、eachを使用した場合も載せておきます。

 

numbers = [1,2,3,4,5]

puts "each"
numbers_each = numbers.each {|n| n*2}
# 返り値は元の配列なので、[1,2,3,4,5]が出力される
p numbers_each

puts "map"
numbers_map = numbers.map {|n| n*2}
# 返り値はブロック処理の結果を集めた配列なので、
# 2倍になった配列が出力される
p numbers_map

puts "map!"
numbers.map! {|n| n*2}
# 破壊的メソッドは元の配列を書き換える
p numbers

 

実行結果は以下の通りです。

 

each
[1, 2, 3, 4, 5]
map
[2, 4, 6, 8, 10]
map!
[2, 4, 6, 8, 10]

 

配列の処理はeachを使うことが多いですが、状況に合わせてmapを使用すると、より短くわかりやすいコードになります。

 

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、ruby python go 。最近はgoにハマってます。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。