从NSMutableArray中删除与条件匹配的所有对象

时间:2012-11-06 20:05:21

标签: ios arrays nsmutablearray

  

可能重复:
  Best way to remove from NSMutableArray while iterating?

Mods:我意识到这是this question的副本,你可以关闭/删除吗?

2 个答案:

答案 0 :(得分:4)

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

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。)

备注:根据理查德·J·罗斯三世(Richard J. Ross III)的建议,我的想法是,“一次性”删除所有匹配元素可能更有效,而不是在迭代过程中单独删除每个元素。 / p>

但是短暂的测试显示情况并非如此。使用1000000个元素从数组中删除每个第二个元素与我的计算机上的两个方法几乎相同。

答案 1 :(得分:2)