为了账号安全,请及时绑定邮箱和手机立即绑定

迭代时从NSMutableArray中删除的最佳方法?

迭代时从NSMutableArray中删除的最佳方法?

慕尼黑8549860 2019-11-22 11:04:13
在Cocoa中,如果我想循环遍历NSMutableArray并删除多个符合特定条件的对象,那么在每次删除对象时都无需重新启动循环的最佳方法是什么?谢谢,编辑:只是为了澄清-我一直在寻找最佳方法,例如,比手动更新索引更优雅的方法。例如,在C ++中,我可以做到;iterator it = someList.begin();while (it != someList.end()){    if (shouldRemove(it))           it = someList.erase(it);}
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

另一种变化。因此,您可以获得可读性和良好的性能:


NSMutableIndexSet *discardedItems = [NSMutableIndexSet indexSet];

SomeObjectClass *item;

NSUInteger index = 0;


for (item in originalArrayOfItems) {

    if ([item shouldBeDiscarded])

        [discardedItems addIndex:index];

    index++;

}


[originalArrayOfItems removeObjectsAtIndexes:discardedItems];


查看完整回答
反对 回复 2019-11-22
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

这是一个非常简单的问题。您只是向后迭代:


for (NSInteger i = array.count - 1; i >= 0; i--) {

   ElementType* element = array[i];

   if ([element shouldBeRemoved]) {

       [array removeObjectAtIndex:i];

   }

}

这是非常常见的模式。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 699 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信