gpt4 book ai didi

ruby - 从数组中删除项目需要多次传递才能将它们全部删除

转载 作者:数据小太阳 更新时间:2023-10-29 06:40:49 24 4
gpt4 key购买 nike

我有一个约 1200 个 ruby​​ 对象的数组,我想遍历它们并删除名称中包含单词或部分单词的对象。

所以我尝试了这个:

list.each do |item|
if item.name =~ /cat|dog|rat/i
puts item.name
list.delete(item)
end
end

它有效,除了它似乎遗漏了一些名称应该匹配的项目。如果我再次运行它,它会发现更多,如果我再次运行它,它会发现更多。每次都发现较少,但我必须运行 3 次才能删除所有内容。

为什么会发生这种情况?

最佳答案

那是你在迭代基础集合的同时修改它。
基本上,如果集合在迭代期间以某种方式发生变化(变为空、添加新元素等),迭代器没有很多方法来处理它。

尝试 reject相反。

list.reject! {|item| item.name =~ /cat|dog|rat/i }

关于ruby - 从数组中删除项目需要多次传递才能将它们全部删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com