📝

Ruby mapメソッドの基本の使い方

2023/06/25に公開

今日は、mapメソッドについてまとめます。

mapメソッドとは?

配列の各要素に対して処理を行った結果を配列で返してくれるメソッドです。

# 基本構文
配列.map { |item| 実行する処理 }

# 実行する処理が複数行に渡る場合
配列.map do |item|
  実行する処理
end

# 例:各要素を3倍にした配列を返す
irb(main):001:0> array = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> array.map {|n| n * 3 }
=> [3, 6, 9]

mapメソッドの省略した書き方

mapメソッドは以下の3つの条件に合えば、ブロックを渡す代わりに&:メソッド名という省略した書き方ができます。

  1. ブロックの引数が1つ
  2. ブロックで呼び出すメソッドに引数がない
  3. ブロック引数に対して、メソッド呼び出し以外の処理がない
irb(main):003:0> array = ["A", "B", "C"]
=> ["A", "B", "C"]

# 通常の書き方
irb(main):004:0> array.map{ |s| s.downcase }
=> ["a", "b", "c"]

# 省略した書き方
irb(main):006:0> array.map(&:downcase)
=> ["a", "b", "c"]

ハッシュに対してmapメソッドを使う

ハッシュに対してもmapメソッドが定義されています。
ただし、使用した場合に返ってくるのは配列であることに注意です。

irb(main):007:0> h = { BANANA: 100, ORANGE: 200, MELON: 300 }
=> {:BANANA=>100, :ORANGE=>200, :MELON=>300}

irb(main):010:0> h.map { |key, value| [key, value*2] }
=> [[:BANANA, 200], [:ORANGE, 400], [:MELON, 600]]

# 返り値をハッシュにしたい場合はto_hメソッドを使用する
irb(main):011:0> h.map { |key, value| [key, value*2] }.to_h
=> {:BANANA=>200, :ORANGE=>400, :MELON=>600}

参考

https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT

https://pikawaka.com/ruby/map

Discussion