我正在尝试删除数组中的所有元素。例如:
@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
方法时如何删除数组中的所有元素的任何想法?
答案 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