mapメソッドとは
mapは、配列やハッシュの要素に対して1つずつ処理したいときに使います。
mapメソッドの記述方法
オブジェクト.map { |変数|
# 実行したい処理
}
配列やハッシュオブジェクトの要素が一つずつ取り出されて、変数に代入されていきます。
ハッシュに対して使うときは注意
ハッシュに対してmapを使うと、その返り値はハッシュではなく配列になるので注意が必要です。また、map!メソッドはハッシュに対しては使用できません。
配列にmapを適用する
a1 = [100, 200, 300]
a2 = a1.map { |x| x * 2 }
p a2 # [200, 400, 600]
上記では結果を別の変数に入れてますが、結果さえ得られれば元のデータは必要ない場合もあります。そんなときは、map!を使えば新しく変数を用意する必要がありません。
a = [100, 200, 300]
p a.map! { |x| x * 2 } # [200, 400, 600]
ハッシュにmapを適用する
配列だけでなくハッシュにもmapを適用することができます。
h = { "apple" => 100, "orange" => 200, "grape" => 300 }
p h.map { |key, value| [key, value * 2] } # [["apple", 200], ["orange", 400], ["apple", 600]]
上記で、戻り値が配列であることに注意してください。
また、to_hメソッドを利用することで戻り値の配列をハッシュに変換できます。
h = { "apple" => 100, "orange" => 200, "grape" => 300 }
p h.map { |key, value| [key, value * 2] }.to_h # {"apple"=>200, "orange"=>400, "grape"=>600}
ただし、to_h メソッドは Ruby 2.1 以降でしか使用できないので注意してください。
mapの&とメソッドを使用した省略記法
オブジェクト.map(&:メソッド名)
a = ["APPLE", "ORANGE", "GRAPE"]
p a.map(&:downcase) # ["apple", "orange", "grape"]
参考にしたサイト