如何从数组中删除一系列值?
如果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]