我该如何在Ruby中实现这个功能?是否有一行代码的技巧可以做到这一点? 例如,我想要删除整数数组中小于3的所有元素。
您可以使用以下任一方法: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}
)。
可能值得指出的是
array.reject! {|x| x < 3}
array.delete_if {|x| x < 3}
是相同的,但
array.reject {|x| x < 3}
仍将返回相同的结果,但不会更改“数组”。
a = [ "a", "b", "c" ]
a.delete_if {|x| x >= "b" } #=> ["a"]
这对于按字母顺序排列的数字和字母有效。它们的值被比较,但如果条件改变呢?
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."]
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."]
#delete_if
和#reject!
略有不同。reject!
会在每次调用块时更改数组,并在没有更改任何项的情况下返回nil
。 - jwadsack