Ruby mapでnilが入ってしまう件

2021年9月29日水曜日

Ruby

t f B! P L

 

概要

ブロック内の結果を配列にして返すrubyのmap。
便利だが以下のように特定の値の時にスキップしたいケースでは、nilが入ってしまう

(1..5).map do |v|
next if v == 3
v
end
=> [1, 2, nil, 4, 5]


理想

[1, 2, 4, 5]


対策

injectを使う

畳み込みを行うinjectを利用する


(1..5).inject([]) do |arr, v|
next arr if v == 3 # nextに結果arrを指定しないとエラーになる
arr.push(v)
end
=> [1, 2, 4, 5]


compactを使う

作成した結果配列に対してcompact
※作成した配列に対してもう一回検査する形になるので、個人的にはinjectの一回で済ませたほうがいいかと思う


[1, 2, nil, 4, 5].compact
=> [1, 2, 4, 5]



自己紹介

Webエンジニアをやっています。日々思ったことや、読書レビュー、IT系の記事などを書き連ねています

広告

Ruby mapでnilが入ってしまう件

  概要 ブロック内の結果を配列にして返すrubyのmap。 便利だが以下のように特定の値の時にスキップしたいケースでは、nilが入ってしまう ( 1 .. 5 ). map do | v | next if v == 3 v end => [ 1 , 2...

QooQ