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

広告

Rails Service追加したらNameError: uninitialized constant

   概要 Rails6でServiceを追加したい。 ServiceってのはModelやControllerに依存しない振る舞いの処理を記述したもので主に肥大化防止、保守性向上を目的に作ったりする。 結局はファイル追加するだけなんだけどつまづいたとこもあるのでメモ Servic...

QooQ