Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在ruby中循环时删除数组元素_Arrays_Ruby - Fatal编程技术网

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 #=> []