是否有可能安全地删除元素从一次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
.each在尝试删除某些内容时会退出循环.
该文件迭代过程中没有说明有关删除可能性东西.
我不是在寻找reject或delete_if.我想用数组的元素做一些事情,有时也从数组中删除一个元素(在我用所述元素完成其他事情之后).
更新1:我对"安全"的定义不太清楚,我的意思是:
Array你不应该过多依赖未经授权的答案.你引用的答案是错误的,正如凯文对它的评论所指出的那样.
从Ruby开始是安全的,从某个each意义上来说,删除元素是一个Array,而Ruby不会因为这样做而引发错误,并且会给出一个决定性的(即非随机的)结果.
但是,您需要小心,因为当您删除一个元素时,它后面的元素将被移位,因此应该迭代的元素将被移动到已经迭代过的已删除元素的位置,并将被跳过.
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |