如果array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
,
我想从数组中删除一系列元素。
例如:我想从该数组中删除索引范围为2..5
的所有元素,结果应为[1, 2, 7, 8, 9]
提前致谢。
答案 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]