如何在Ruby中删除满足条件的所有数组元素?

57

我该如何在Ruby中实现这个功能?是否有一行代码的技巧可以做到这一点? 例如,我想要删除整数数组中小于3的所有元素。

4个回答

73

您可以使用以下任一方法:new_array = array.reject {|x| x < 3}reject返回一个新数组)或者array.reject!{|x| x < 3}reject!delete_if会直接修改原始数组)。

还有一种常用的方法是select,它类似于reject,但你需要指定保留元素的条件,而不是拒绝它们(例如,如果要移除小于3的元素,则可以使用new_array = array.select {|x| x >= 3})。


3
Ruby的#delete_if#reject!略有不同。reject!会在每次调用块时更改数组,并在没有更改任何项的情况下返回nil - jwadsack

28

可能值得指出的是

array.reject! {|x| x < 3}
array.delete_if {|x| x < 3}

是相同的,但

array.reject {|x| x < 3}

仍将返回相同的结果,但不会更改“数组”。


12
  a = [ "a", "b", "c" ]
  a.delete_if {|x| x >= "b" }   #=> ["a"]

1

这对于按字母顺序排列的数字和字母有效。它们的值被比较,但如果条件改变呢?

array = ["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg", "Uses", ": ", "Arc welding, material handling, machine loading, application", "This particular unit is in excellent condition with under 700 hours."]

我们需要删除“Uses”值后面的所有元素 例如:
array = ["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg"]

所以,那个决定不起作用(它只是移除一个元素):

array.delete_if {|x| x >= "Uses" }
["Type", ": Jointed", "Axes", ": 6", "Reach", ": 951 mm", "Capacity", ": 6 Kg", ": ", "Arc welding, material handling, machine loading, application", "This particular unit is in excellent condition with under 700 hours."]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接