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

时间:2014-11-13 12:57:39

标签: ruby arrays

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

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

提前致谢。

5 个答案:

答案 0 :(得分:20)

使用slice!

  

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

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

答案 1 :(得分:2)

你可以试试这个

[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]

答案 2 :(得分:1)

正如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]

答案 3 :(得分:0)

范围包含值时删除

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

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

答案 4 :(得分:-1)

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

如果您尝试通过 index 而不是按值删除元素,解决此问题的一种方法是迭代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]