概要
ブロック内の結果を配列にして返す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]
0 件のコメント:
コメントを投稿