如何从数组中删除一系列值?

如果array = [1, 2, 3, 4, 5, 6, 7, 8, 9] ,我想从数组中删除一系列元素。

例如:我想从该数组中删除索引在2..5范围内的所有元素,结果应为[1, 2, 7, 8, 9] 2..5 [1, 2, 7, 8, 9]

提前致谢。

使用slice!

删除[…]范围给出的元素。

 array = [1, 2, 3, 4, 5, 6, 7, 8, 9] array.slice!(2..5) array #=> [1, 2, 7, 8, 9] 

你可以试试这个

 [1, 2, 3, 4, 5, 6, 7, 8, 9].reject.with_index{|element,index| index >= 2 && index <= 5} => [1, 2, 7, 8, 9] 

或使用delete_if

 [1, 2, 3, 4, 5, 6, 7, 8, 9].delete_if.with_index{|element,index| index >= 2 && index <= 5} => [1, 2, 7, 8, 9] 

正如Stefan发布的那样,使用slice! 删除位于数组中某个范围内的值。 但是,如果您需要删除某个范围内的值,请使用delete_if

 array = [9, 8, 7, 6, 5, 4, 3, 2, 1] array.delete_if {|value| (2..5) === value } array #=> [9, 8, 7, 6, 1] 

范围包含值时删除

执行此操作的许多方法之一是使用块来调用Array#delete_if ,该块检查Array的每个元素是否包含在带有Array#includes的Range中? 。 例如:

 array = [1, 2, 3, 4, 5, 6, 7, 8, 9] array.delete_if { |i| (2..5).include? i } #=> [1, 6, 7, 8, 9] 

按索引从范围删除数组元素

如果您尝试按索引而不是按值删除元素,解决此问题的一种方法是迭代Range对象,为范围中的每个索引调用Array#delete_at 。 例如:

 array = [1, 2, 3, 4, 5, 6, 7, 8, 9] (2..5).map { |i| array.delete_at i } ##=> [3, 5, 7, 9]