【Ruby on Rails】next ifとfilter_map
ループ処理の中のnext ifは指定した条件の場合、処理をスキップする。
以下のコードでは偶数の場合に処理をスキップしているが、暗黙的にnil を返している。
code:ruby
arr = 1, 2, 3, 4, 5, 6, 7, 8, 9
new_arr = arr.map {|x|
next if x.even?
x
}
#=> 1, nil, 3, nil, 5, nil, 7, nil, 9
nilが不要な場合compactで取り除くこともできるけど、filter_mapを使って真であった値の配列を返した方がコードが分かりやすい。
この場合、明示的にfalseを返した方が真の値のみを必要としている意図が伝わりやすい(nilでも結果は変わらないけど)
code:ruby
arr = 1, 2, 3, 4, 5, 6, 7, 8, 9
new_arr = arr.map {|x|
next if x.even?
x
}.compact
#=> 1, 3, 5, 7, 9
new_arr = arr.filter_map {|x|
next false if x.even?
x
}
#=> 1, 3, 5, 7, 9
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/filter_map.html
#ruby #rails