如何检查具有相同标志的对象的NSMutableArray?

时间:2012-11-13 01:52:17

标签: objective-c

我有一个Card对象,它有一个标记isFlipped。我将它们存储在NSMutableArray中。我想检查我的数组中的两个对象是否有标志,如果有,我删除它们。 据我所知,我需要迭代数组,但如何获得另一个带有标志的对象?

- (void) checkCards
{
    for (Card *card in cards) {

        if (card.flipped)
        {
            if ( ??? )
            {

            }

        }
    }
}

2 个答案:

答案 0 :(得分:1)

存储要在变量中删除的卡片的索引,如果设置了两个变量的值,则只需删除卡片。请参阅以下

- (void) checkCards {
    int card1 = -1;
    int card2 = -1;
    for(int i = 0; i < [cards count]; i++) {
        Card *card = [cards objectAtIndex: i];
        if(card.flipped) {
            if(card1 == -1) {
                card1 = i;
            } else {
                card2 = i;
            }

            if(card1 != -1 && card2 != -1) {
                // remove cards
                break;
            }
        }
    }
}

答案 1 :(得分:1)

我会使用NSArray方法,indicesOfObjectsPassingTest:。您可以像这样使用它:

    NSIndexSet *indexSet = [cards indexesOfObjectsPassingTest:^BOOL (Card *obj, NSUInteger idx, BOOL *stop) {
        return obj.isFlipped = YES;
    }];
    [cards removeObjectsAtIndexes:indexSet];

这将删除其isFlipped为YES的所有卡,因此如果可能超过2,并且您只想删除2,那么您必须遍历indexSet并在删除2后停止。