Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. 配列.map / collect

配列.map / collect

配列の各要素にブロックの処理を適用し、結果を新しい配列として返すメソッドです。元の配列は変更されません。

構文
# 各要素を変換した新しい配列を返します。
配列.map { |要素| 処理 }
配列.collect { |要素| 処理 }  # map の別名

# 破壊的バージョン(元の配列を直接変更します)。
配列.map! { |要素| 処理 }
配列.collect! { |要素| 処理 }
メソッド一覧
メソッド概要
map { |e| }各要素にブロックを適用した結果の新しい配列を返します。元の配列は変更されません。
collect { |e| }『map』の別名です。動作はまったく同じです。
map! { |e| }各要素をブロックの戻り値で置き換えます。元の配列を直接変更する破壊的メソッドです。
collect! { |e| }『map!』の別名です。
サンプルコード
数値 = [1, 2, 3, 4, 5]

# 各要素を2倍にした新しい配列を作ります。
二倍 = 数値.map { |n| n * 2 }
puts 二倍.inspect   # [2, 4, 6, 8, 10]
puts 数値.inspect   # [1, 2, 3, 4, 5](元の配列は変わりません)

# 文字列に変換します。
文字列 = 数値.map { |n| "#{n}番" }
puts 文字列.inspect  # ["1番", "2番", "3番", "4番", "5番"]

# シンボル &:メソッド名 でも書けます。
単語 = ["hello", "world", "ruby"]
大文字 = 単語.map(&:upcase)
puts 大文字.inspect  # ["HELLO", "WORLD", "RUBY"]

# map! で元の配列を変更します。
scores = [60, 70, 80, 90]
scores.map! { |s| s + 5 }
puts scores.inspect  # [65, 75, 85, 95]

# ハッシュを生成するときにも便利です。
名前 = ["Alice", "Bob", "Carol"]
長さマップ = 名前.map { |name| [name, name.length] }.to_h
puts 長さマップ.inspect  # {"Alice"=>5, "Bob"=>3, "Carol"=>5}
概要

『map』は配列の変換操作で最もよく使われるメソッドです。ブロックの戻り値が新しい配列の要素になります。『collect』は『map』の別名であり、どちらを使っても動作は同一です。Rubyコミュニティでは『map』が一般的に好まれます。

『&:メソッド名』の記法はシンボルの『to_proc』機能を利用したもので、各要素にそのメソッドを呼び出す処理を簡潔に書けます。詳しくは『シンボル.to_s / to_proc』を参照してください。

破壊的な『map!』はブロックが『nil』を返した場合にも要素が『nil』で置き換えられるため、意図しない『nil』が混入しないよう注意してください。

条件に一致する要素だけを取り出す場合は『select / filter / reject』を、変換と絞り込みを同時に行う場合は『flat_map / filter_map』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。