If array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
,
I want to delete a range of elements from array.
For example: I want to delete all elements with an index in th
You can try this
[1, 2, 3, 4, 5, 6, 7, 8, 9].reject.with_index{|element,index| index >= 2 && index <= 5}
=> [1, 2, 7, 8, 9]
or use 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]
Use slice!:
Deletes the element(s) given by [...] a range.
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.slice!(2..5)
array #=> [1, 2, 7, 8, 9]
If you are trying to delete elements by index rather than by value, one way to solve this is to iterate over your Range object, invoking Array#delete_at for each index in the range. For example:
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
(2..5).map { |i| array.delete_at i }
##=> [3, 5, 7, 9]
As Stefan posted, use slice!
to remove values located inside a certain range in the array. If what you need, however, is to remove values that are within a certain range use 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]
One of the many ways to do this is to invoke Array#delete_if with a block that checks whether each element of the Array is included in the Range with Array#include?. For example:
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.delete_if { |i| (2..5).include? i }
#=> [1, 6, 7, 8, 9]