1

我有一个 NSMutableArray 类别,它有一个删除方法:

@interface NSMutableArray(MyCategory)
- (void) deleteItemsMatchingCriteria: (SomeCriteria) theCriteria;
@end

这应该如何实施?

要遍历数组,我通常使用 enumerateObjectsUsingBlock: 但在迭代过程中当然不能从数组中删除一项。

一般而言,是否有一种规范的方法可以对数组执行此操作,如果执行删除的方法是数组的一个类别,是否会有所不同?

4

2 回答 2

4

显然,在下面的代码中,我检查了 Criteria,您将有更多的逻辑来确定是否应该删除该对象。


-(void)deleteItemsMatchingCriteria:(BOOL)theCriteria{
    NSMutableIndexSet *remove = [[NSMutableIndexSet alloc] init];

    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if(theCriteria){
            [remove addIndex:idx];
        }
    }];

    [self removeObjectsAtIndexes:remove];
}

于 2012-05-04T21:29:16.710 回答
4

最简单的方法是使用indexesOfObjectsPassingTest:方法:

[self removeObjectsAtIndexes:[self indexesOfObjectsPassingTest:
    ^BOOL (id element, NSUInteger i, BOOL *stop) {
        return /* YES if the object needs to be removed */;
    }]
];
于 2012-05-04T21:33:09.853 回答