rubyのmapメソッドというものがどういうものかがよくわからなかったため、リファレンスなどを参考にしながら自分なりにまとめてみました。
参考
Ruby 3.0.0 リファレンスマニュアル:#collect
UX MILK様:Rubyのmap, map!メソッドの使い方
Pikawara様:【Ruby】mapメソッドの基礎から応用をマスターして、効率的なコードを書けるようにしよう!
mapメソッドとは
配列の要素の数だけブロック内で処理を繰り返して新しい配列を返すメソッド
mapメソッドの基本
配列.map( |変数| 実行したい処理)
#または
配列.map do |変数|
実行したい処理
end
個人的には下の記述の方が見慣れています。
実際に数字を入れてみるとこのような感じになるの思います。
num = [1, 2, 3, 4,]
n_num = num.map{ |n| n * 2 }
p n_num
# => [2, 4, 6, 8]
#または
num = [1, 2, 3, 4,]
n_num = num.map do |n|
n * 2
end
p n_num
# => [2, 4, 6, 8]
下の書き方は新しい配列を返すためのからの入れ物が必要でコードが長くなるため上の書き方が一般的でしょうか。
そして、mapメソッドは配列だけでなくハッシュにも使用可能です。返り値は配列になります。
mapメソッドの省略した書き方
&:メソッド名と記述することで省略することができます。
ただし使用するためには条件があります。
- ブロックの引数が1つである
- ブロックで呼び出すメソッドに引数がないこと
- ブロック引数に対して、メソッドを呼び出すこと以外の処理がない
#通常の書き方
num = ["1", "2", "3", "4",]
n_num = num.map{ |n| n.to_i }
p n_num
# =>[1, 2, 3, 4]
#省略した書き方
num = ["1", "2", "3", "4",]
n_num = num.map(&:to_i)
p n_num
# =>[1, 2, 3, 4]
#複数行にわたる書き方
num = ["1", "2", "3", "4",]
n_num = num.map do |n|
n.to_i
end
p n_num
# =>[1, 2, 3, 4]
基本部分の記述になります。
ハッシュにmapメソッドを使用した場合はどのように出力されるかなどは改めてまとめていきたいと思います。
mapメソッドと全く同じ動作をするメソッドでcollectメソッドというものもありますが、
-
mapメソッドは、データ構造を保ったまま、実行する処理に従い元のデータ構造を別データ構造に変換する
-
collectメソッドは、データ構造内の全ての要素に対して、実行する処理を繰り返し実行し、その結果を集めたもの
と考え方が違うみたいです。