在ruby中循环时删除数组元素

时间:2015-06-14 14:42:11

标签: arrays ruby

我正在尝试删除数组中的所有元素。例如:

@array = [1,2,3,4,5]
@array.each do |element|
  @array.delete(element)
end

现在,我理解为什么上面的代码不起作用。但是,我的任务是在使用此delete_entry方法时删除数组的所有元素:

def delete_entry(entry)
   @array.delete(entry)
end

我已经读过在ruby中设计中不允许删除迭代中的元素。关于在我的实现中使用delete_entry方法时如何删除数组中的所有元素的任何想法?

4 个答案:

答案 0 :(得分:3)

def delete_entry(entry)
  @array.delete(entry)
end

@array = [1,2,3,4,5]

delete_entry(@array.first) until @array.empty?
@array #=> []

我认为这比使用枚举器更好,并且当@array包含重复值时需要的操作更少。

答案 1 :(得分:2)

反向循环遍历数组:

@array = [1,2,3,4,5]
@array.reverse_each do |element|
  @array.delete(element)
end
p @array # => []

答案 2 :(得分:1)

@array = [1,2,3,4,5]
@_array = @array.clone
@_array.each do |element|
  delete_entry(element)
end

答案 3 :(得分:1)

class Dog
  attr_reader :array

  def initialize
    @array = [1, 2, 3]
  end

  def delete_entry(entry)
     @array.delete(entry)
  end
end


d = Dog.new

d.array.length.times do 
  d.delete_entry(d.array[0])
end

p d.array

--output:--
[]
  

我已经读到在迭代过程中删除元素是   在红宝石中被设计所禁止。

阿勇。它只是像你期望的那样赢得了工作。这就是原因:

deleting elements from an array while iterating over the array