You can remove all nil
values in a Ruby array in the following ways:
Using Array#compact
The Array#compact
method returns a new array with all nil
values removed:
arr = [1, 2, nil, 3, nil, 4, 5, nil] new_arr = arr.compact print new_arr #=> [1, 2, 3, 4, 5]
You may also mutate the original array by using Array#compact!
(instead of Array#compact
), for example, like so:
arr = [1, 2, nil, 3, nil, 4, 5, nil] arr.compact! print arr #=> [1, 2, 3, 4, 5]
Using Array#reject
The Array#reject
method allows you to exclude values that return true
in its block. You can use this to exclude all nil
values in an array in the following way:
arr = [1, 2, nil, 3, nil, 4, 5, nil] new_arr = arr.reject { | item | item == nil } print new_arr #=> [1, 2, 3, 4, 5]
This returns a new array with all nil
values removed. You can also shorten this by using the &:
syntax, for example, like so:
arr = [1, 2, nil, 3, nil, 4, 5, nil] new_arr = arr.reject(&:nil?) print new_arr #=> [1, 2, 3, 4, 5]
You may also mutate the original array by using Array#reject!
(instead of Array#reject
), for example, like so:
arr = [1, 2, nil, 3, nil, 4, 5, nil] arr.reject!(&:nil?) print arr #=> [1, 2, 3, 4, 5]
Using Array#filter
Introduced in Ruby 2.6, you can use the Array#filter
method to only include values that are not nil
in the resulting array:
# Ruby 2.6+ arr = [1, 2, nil, 3, nil, 4, 5, nil] new_arr = arr.filter { | item | item != nil } print new_arr #=> [1, 2, 3, 4, 5]
This would return a new array excluding all nil
values. You may also mutate the original array by using Array#filter!
(instead of Array#filter
), for example, like so:
# Ruby 2.6+ arr = [1, 2, nil, 3, nil, 4, 5, nil] arr.filter! { | item | item != nil } print arr #=> [1, 2, 3, 4, 5]
Please note that Array#filter
and Array#filter!
are aliases of Array#select
and Array#select!
respectively, and have no performance benefit over each other. Therefore, you can simply use Array#select
in versions of Ruby prior to v2.6.
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.