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

広告

[書籍] ティムクック アップルをさらなる高みへと押し上げた天才 感想まとめ

   こういう人におすすめ ティムクックのことを知らないという人 アップル、ジョブズのファン 概要 2011年 ティムクック がAppleのCEOを引き継ぎました。 クック の知名度は低く、批評家たちは ジョブズ なしではAppleは終わりを迎えるだろうと危惧していました。 しか...

QooQ