📜  红宝石 |数组拒绝()函数(1)

📅  最后修改于: 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;否则,返回修改后的数组。

用法示例
示例一:删除小于 5 的元素
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? 方法被调用以检查数组中的每个元素。如果元素是偶数,则该元素将被删除。

示例三:删除 nil 元素
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 方法。