Rubyのmapメソッドについて

mapは「配列変更」で破壊的「!」をつけるかどうかで保存か、捨てるかを選択できる。

参考サイト
Google検索「ruby map array」
https://ref.xaio.jp/ruby/classes/array/map
https://qiita.com/4geru/items/a773f9362fb90e0e0b4f

map

「mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します。」

↓自分変換(ご了承ください笑。)

「mapメソッドは、要素の数だけ要素順に繰り返し、do~endブロック内で処理をした戻り値(出力値)を要素として配列を作成し、空中に保持します。その場しのぎというか、使い捨てというか、保存しなければ一瞬で消えます。」

mapを含んだ式自体(「配列名からendまで」)それが空中保持の架空配列?を表します。架空配列なので元の配列自体は変わりません。
「いまこの瞬間欲しい使い捨て配列を作る」イメージ?すいません。

あとコンソールの出力表示が「{}」と「do~end」では異なる。意味は同じ(だと思う)。

array = ["a", "b", "c", "d", "e", "f", ]

#パターンdoend
p array.map do |ele| #mapの出力値はpで表示したら即消えます
 ele.upcase #大文字化
end

#パターン{}
p array.map { |ele| ele.upcase }

p array #=>元配列表示

map!

「map!メソッドは、要素の数だけ要素順に繰り返しブロックを実行し、各要素をブロックの戻り値と入れ替えます。」

↓自分変換(ご了承ください笑。)

「map!メソッドは、要素の数だけ繰り返し、do~endブロック内で処理をした戻り値(出力値)は元の配列の各要素を上書きし、元の配列の中身を作り変えてしまいます。」

mapのおおかたのイメージは上記の「mapの説明」でわかったかと思います(?)。mapは空中に架空配列?を作り、保存しなければすぐ消えてしまいますが、map!メソッドは実行してしまうだけで、元の配列の中身を作り変えて、上書きして、保存してしまいます。

※「架空配列」とか「すぐ消える」とか他にも勝手な言葉を使っていますが、mapを使った式それ自体が配列を表していると言えます。

=begin
要所要所コメントを外してください
見やすいので{}だけ書きます。
1と2はちょっとした違いです。
=end

array = ["a", "b", "c", "d", "e", "f", ]
p array

#1
#p array.map! {|ele| ele.upcase}

#2
#array.map! {|ele| ele.upcase}
#p array

元のarrayは戻ってきません…。

「map」で元の配列を変える

ちなみにmap!使わなくても「map」で元の配列を変えることができます。単にただの上書きです。
(あれ?「map!」って自動上書きってことか?)

array = [1, 2, 3,]
array = array.map{ |ele| ele.to_s } #同名の配列に入れ直している
p array #=>元arrayが変わってしまいました

【復習】

#mapメソッド
array = [1, 2, 3,]
p array.map {|ele| ele.to_s} #=>空中配列表示
p array #=>元配列表示

#map!メソッド
array.map! { |ele| ele.to_s} #=>配列変更
p array #=>新配列

mapは「配列変更」で破壊的「!」をつけるかどうかで保存、捨てるかを選択できる。