objective-c – 在迭代时从NSMutableArray中删除的最佳方法?

objective-c – 在迭代时从NSMutableArray中删除的最佳方法?,第1张

概述在Cocoa中,如果我想循环遍历一个NSMutableArray并删除符合一定条件的多个对象,最好的方法是在每次删除对象时不重新启动循环? 谢谢, 编辑:只是为了澄清 – 我一直在寻找最好的方式,例如。比我手动更新索引更优雅。例如在C我可以做; iterator it = someList.begin();while (it != someList.end()){ if (shoul 在Cocoa中,如果我想循环遍历一个NSMutableArray并删除符合一定条件的多个对象,最好的方法是在每次删除对象时不重新启动循环?

谢谢,

编辑:只是为了澄清 – 我一直在寻找最好的方式,例如。比我手动更新索引更优雅。例如在C我可以做;

iterator it = someList.begin();while (it != someList.end()){    if (shouldRemove(it))           it = someList.erase(it);}
解决方法 为了清楚起见,我喜欢做一个初始循环,我收集要删除的项目。然后我删除它们。下面是一个使用Objective-C 2.0语法的示例:

NSMutableArray *discardedItems = [NSMutableArray array];SomeObjectClass *item;for (item in originalArrayOfItems) {    if ([item shouldBediscarded])        [discardedItems addobject:item];}[originalArrayOfItems removeObjectsInArray:discardedItems];

然后,不存在索引是否正确更新,或其他小簿记细节的问题。

已编辑以添加:

在其他答案中已经注意到,逆公式应该更快。即如果你遍历数组并组成一个新的要保留的对象数组,而不是丢弃对象。这可能是真的(虽然如何分配一个新的数组的内存和处理成本,并放弃旧的数组?),但即使它更快,它可能不会像一个朴素的实现一样大,因为NSArrays不像“正常”数组。他们谈论谈话,但他们走不同的步行。在这里看到一个很好的分析:

http://ridiculousfish.com/blog/archives/2005/12/23/array/

逆公式可能更快,但我从来不需要关心它是否,因为上述公式总是足够快,我的需要。

对我来说,回家的消息是使用任何配方是最清楚的。仅在必要时进行优化。我个人认为上述配方最清晰,这就是为什么我使用它。但是如果逆公式对你更清楚,去吧。

总结

以上是内存溢出为你收集整理的objective-c – 在迭代时从NSMutableArray中删除的最佳方法?全部内容,希望文章能够帮你解决objective-c – 在迭代时从NSMutableArray中删除的最佳方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1050627.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存