未分類

Rubyのeach、map、selectで配列操作

投稿日:

【バージョン情報】
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

「!」ビックリマーク使うだけで挙動が変わってしまうなんてびっくりだね!









-未分類
-, , , ,

執筆者:

関連記事

no image

Javascriptに浮気中

現在、Javascriptに浮気中です。浮気というか二股?Rubyも継続しています。 そもそもRubyを勉強しているのはRailsでWebサービスを作りたかったから、そしてそのWebサービスでお金儲け …

no image

Rubyで文字列を区切り文字で配列にするsplit

結論「str.split(“区切り文字”)」 str.split(“区切り文字”) =>Arrayが戻り値 「”あいあいあいあい”.split(“い”)」 =>[” …

no image

時間にも仕切りがある

値段に仕切りがあるように、時間にも仕切りを入れたほうが自分がラクになる。 シンプルに得をすること チョコレートを1個100円で仕入れて、150円で売る。50円得する。 例「30分」の利益を得る 幹夫君 …

no image

エクセルオンラインで「TODAY関数で1日ズレる」を直す方法

環境 Firefox71.0 Windows10Pro OneDrive for Business 修正方法 ※誰かの共有リンク先で「1日ズレる」事象が発生している場合、そのデータを持っている方に作業 …

no image

「イートイン脱税」という聞こえが悪い言葉

法律というのは強制力があるので、ロジックとしてはたしかに脱税になります。でも…言うなら、ちゃんと整えてから言ってほしい。という願いです。立法機関…習ったしょ?できればある行動のスタートからゴールまで抜 …