📅  最后修改于: 2023-12-03 15:41:12.761000             🧑  作者: Mango
在 Ruby 中,Array#reject
方法允许过滤数组中的元素,返回一个新的数组,新数组仅包含不满足条件的元素。和 Array#select
相反,仅返回满足条件的元素。
但是在某些情况下,我们希望过滤出不满足条件的元素并进行操作,这时可以使用 Array#reject
方法的变体 Array#reject!
或者使用 Array#delete_if
方法。
在这里我们主要介绍 Array#reject!
方法。
array.reject! { |item| block } → array or nil
Array#reject!
方法接收一个块作为参数,块中的表达式用于确定要保留或删除的元素。
item
:数组中的每一个元素。block
:用于判断数组中每个元素是否应该被删除的表达式。如果没有更改数组,则返回 nil
;否则,返回修改后的数组。
my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_array.reject! { |item| item < 5 }
# => [5, 6, 7, 8, 9]
上面这个示例会删除 my_array 数组中的小于 5 的所有元素,并返回结果数组 [5, 6, 7, 8, 9]。
my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_array.reject!(&:even?)
# => [1, 3, 5, 7, 9]
这个示例使用了一个简洁的语法 &:even?
,意味着传入一个常规参数块 (&:even?)
,在这个块中, even?
方法被调用以检查数组中的每个元素。如果元素是偶数,则该元素将被删除。
my_array = [1, nil, 2, nil, 3, 4, nil]
my_array.reject!(&:nil?)
# => [1, 2, 3, 4]
在这个示例中,使用了 &:nil?
语法来删除所有的 nil 元素,并返回新的数组 [1, 2, 3, 4]。
reject!
,但这并不意味着该方法执行删除操作。这个方法实际上只是将所有满足块中表达式的元素过滤出来。如果要从数组中删除元素,请使用 Array#delete_if
方法。