0

可能重复:
迭代时从 NSMutableArray 中删除的最佳方法?

模组:我意识到这是这个问题的重复,你能关闭/删除它吗?

4

2 回答 2

5

如果您不想创建临时或新数组,可以使用:

NSMutableArray *array = ...; // your mutable array

NSIndexSet *toBeRemoved = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    // The block is called for each object in the array.
    BOOL removeIt = ...; // YES if the element should be removed and NO otherwise
    return removeIt;
}];
[array removeObjectsAtIndexes:toBeRemoved];

(但使用了一个临时NSIndexSet的。)

备注:我的想法是,像 Richard J. Ross III 所建议的那样,“一次”删除所有匹配元素而不是在迭代期间单独删除每个元素可能更有效。

但一个简短的测试表明情况并非如此。在我的计算机上使用这两种方法从具有 1000000 个元素的数组中删除每个第二个元素所花费的时间几乎相同。

于 2012-11-06T20:22:57.437 回答
2

您可以使用 NSPredicate 来执行此操作,请参阅此 SO question and answer。

https://stackoverflow.com/a/129942/36984

苹果文档为此:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableArray/filterUsingPredicate

于 2012-11-06T20:16:40.203 回答