Arrays 在ruby中循环时删除数组元素
我正在尝试从数组中删除所有元素。例如:Arrays 在ruby中循环时删除数组元素,arrays,ruby,Arrays,Ruby,我正在尝试从数组中删除所有元素。例如: @array = [1,2,3,4,5] @array.each do |element| @array.delete(element) end 现在,我明白了为什么上面的代码不起作用了。但是,我的任务是在使用此delete\u条目方法时删除数组的所有元素: def delete_entry(entry) @array.delete(entry) end 我读过ruby中的设计不允许在迭代过程中删除元素。在实现中使用delete\u entr
@array = [1,2,3,4,5]
@array.each do |element|
@array.delete(element)
end
现在,我明白了为什么上面的代码不起作用了。但是,我的任务是在使用此delete\u条目
方法时删除数组的所有元素:
def delete_entry(entry)
@array.delete(entry)
end
我读过ruby中的设计不允许在迭代过程中删除元素。在实现中使用delete\u entry
方法时,如何从数组中删除所有元素
@array = [1,2,3,4,5]
@_array = @array.clone
@_array.each do |element|
delete_entry(element)
end
我已经读到,在迭代过程中删除元素是非常困难的
ruby中的设计不允许
可笑。它不会像你预期的那样工作。原因如下:
反向循环通过阵列:
@array = [1,2,3,4,5]
@array.reverse_each do |element|
@array.delete(element)
end
p @array # => []
我认为这比使用枚举器更好,并且在
@array
包含重复值时需要更少的操作。?这是我最初的想法:@array.delete_if{true}
。但是我需要使用delete_entry
方法。我认为更准确的说法是,“在枚举接收者元素时删除这些元素是有争议的……”创建类的意义是什么?您的方法非常简单,如下两行:@array=[1,2,3,4,5]@array.size.times{| element |@array.delete(@array[0])}
@RustamA.Gasanov,在代码的顶层使用@变量
有什么意义?为了不创建神秘的狗
并显示op可以应用于其代码的方法?如果您不喜欢顶层的实例变量,是什么阻止您编写array=[1,2,3,4,5];array.size.times{| element | array.delete(array[0])}
我只是不明白Dog
与问题和人工代码复杂化有什么关系(你问用两行代码代替20行代码有什么意义吗?:)@Rustam A.Gasanov,如果您不喜欢顶层的实例变量,是什么阻止您编写数组=[1,2,3,4,5];因为那不是op的密码。您的示例对主对象和对象类(忽略私有访问)执行的操作与我的代码对dog实例和dog类执行的操作相同,只是您向所有对象公开了一个全局方法,而不是将其范围限制在dog类。可以op的例子似乎来自一个类内部,所以我用Dog类来模拟该类。生成一个临时数组并按相反顺序遍历该数组。@7stud是一个枚举器,因此没有构造临时数组。当给定一个块时,它返回接收器,就像数组一样。每个
都返回。@Cary Swoveland,是的,我引用了可枚举文档——我没有意识到数组有一个相反的_each()。[nil,nil,false,false]
?
@array = [1,2,3,4,5]
@array.reverse_each do |element|
@array.delete(element)
end
p @array # => []
def delete_entry(entry)
@array.delete(entry)
end
@array = [1,2,3,4,5]
delete_entry(@array.first) until @array.empty?
@array #=> []