从每个内部的数组中删除是否安全?

Nob*_*are 8 ruby arrays

是否有可能安全地删除元素从一次Array迭代通过它each?第一次测试很有希望:

a = (1..4).to_a
a.each { |i| a.delete(i) if i == 2 }
# => [1, 3, 4] 
Run Code Online (Sandbox Code Playgroud)

但是,我找不到有关事实的真相:

  • 是否安全(按设计)
  • 从哪个Ruby版本开始它是安全的

在过去的某些时刻,似乎无法做到:

它不起作用,因为Ruby .each在尝试删除某些内容时会退出循环.

文件迭代过程中没有说明有关删除可能性东西.

我不是在寻找rejectdelete_if.我想用数组的元素做一些事情,有时也从数组中删除一个元素(在我用所述元素完成其他事情之后).

更新1:我对"安全"的定义不太清楚,我的意思是:

  • 不要提出任何例外
  • 不要跳过任何元素 Array

saw*_*awa 8

你不应该过多依赖未经授权的答案.你引用的答案是错误的,正如凯文对它的评论所指出的那样.

从Ruby开始是安全的,从某个each意义上来说,删除元素是一个Array,而Ruby不会因为这样做而引发错误,并且会给出一个决定性的(即非随机的)结果.

但是,您需要小心,因为当您删除一个元素时,它后面的元素将被移位,因此应该迭代的元素将被移动到已经迭代过的已删除元素的位置,并将被跳过.

  • @NobodysNightmare:“我想挑战你所说的” - 通常,带有金色徽章的用户知道他们在说什么。:) (2认同)