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系の記事などを書き連ねています

広告

[書籍] 世界一楽しい決算書の読み方感想まとめ

  こういう人におすすめ 決算書を読もうとして挫折した人 企業分析したい投資家 会社で経営企画担当、管理職などのポジションの人 概要 著者はTwitterで会計クイズを行なっている 「大手町のランダムウォーカー」さん 。 「日本人全員が財務諸表を読める世界を創る」 を合言葉にして...

QooQ