2012-11-06 59 views
0

可能重复的所有对象:
Best way to remove from NSMutableArray while iterating?删除从一个NSMutableArray匹配条件

MODS的:我意识到这是的this question重复,你可以关闭/删除呢?

+0

您可以在迭代时删除对象。 –

+0

@ RichardJ.RossIII:当我尝试这样做时,它崩溃:'***由于未捕获的异常'NSGenericException'而终止应用程序,原因:'*** Collection <__ NSArrayM:0x6baab80>在枚举时发生了变化.'' –

+2

只是迭代它的旧式。使用索引的整数。 –

回答

3

如果你不希望创建一个临时的或新的数组,你可以这样做:

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个元素从数组中移除每个第二个元素几乎与我的计算机上的两种方法相同。

相关问题