【バージョン情報】
Windows7,10Pro
Ruby2.4.x
eachはわかるね?
array = [
"apple",
"banana",
"orange",
]
array.each do |ele|
puts ele.upcase
end
#全部大文字で表示されるね。
mapとselectによる配列操作
どちらも配列操作には便利ですね。
map
「元の配列を利用して、新しい配列を返すときに使える。」
「大文字にした新しい配列を作りたい!」
こういう処理ってよくあるね。
元の配列を利用して、それを加工した新しい配列を作りたい!ってこと。
【eachだと?】
空配列、例えばnew_arrayを作って、eachで回しながら、「<<」で要素を追加するやり方。
【mapだと直でそのまま新配列を作成できる!】
array = [
"apple",
"banana",
"orange",
]
new_array = array.map do |ele|
ele.upcase
end
puts "元配列:#{array}"
#「#{}」で配列展開すると1行出力できる
puts "新配列が#{new_array}"
#直接表示する場合
p array.map { |ele| ele.upcase }
select
条件にtrueなものだけ配列の要素として返す。
だからブロックに条件式を書くことになります。
ifに似てるね。条件式を書いて、trueのものだけ返してくる。
array = [
"apple",
"banana",
"orange",
"pain",
"grape",
]
p array.select { |ele| ele.match(/p/) }
#trueにしたい条件は「p」を含んでいること
#do~endを使い、なおかつ「select_array」に代入する場合
select_array = array.select do |ele|
ele.match(/p/)
end
puts select_array
#元の配列は相変わらず
puts array
selectの反転メソッドに「reject」があるけど…。
私は頭が弱いので、反転するメソッドは混乱する。自分の頭はプログラマー向けではないようです。(悲笑)
他にもuntilやunlessが苦手です。(悲笑)
プログラマー脳になりたい!(悲願)
#「p」が入っていないもの抽出
array = [
"apple",
"banana",
"orange",
"pain",
"grape",
]
p array.reject { |ele| ele.match(/p/) }
ちなみに「!」で条件を反転させたら同じ意味。
自分はこっちを使います。
p array.reject { |ele| !ele.match(/p/) }
参考書とか見ると「ueless、until、rejectなどをちゃんと使いましょう!」ってよく見ます。みなさんはできるだけ使えたら使ってください。
「map」と「map!」の違い(selectも)
「!」は破壊的メソッド。元の配列を変えてしまいます。
比較
【map】
#元arrayは変わらない
array = ["apple","banana","orange","pain","grape",]
p array.map { |ele| ele.upcase }
p array
【map!】
#元arrayも大文字かしてしまう(x_x)
array = ["apple","banana","orange","pain","grape",]
p array.map! {|ele| ele.upcase}
p array
【select】
#これは前述のselectコード例
array = ["apple","banana","orange","pain","grape",]
p array.select { |ele| ele.match(/p/) }
p array
【select!】
#元arrayに「.select」を使うと元arrayの要素が減ります
array = ["apple","banana","orange","pain","grape",]
p array.select! { |ele| ele.match(/p/) }
p array
「!」ビックリマーク使うだけで挙動が変わってしまうなんてびっくりだね!