0

我有一个 Card 对象,它有一个标志 isFlipped。我将它们存储在 NSMutableArray 中。我想检查我的数组中的两个对象是否打开了标志,如果有,我将它们删除。据我了解,我需要遍历数组,但是如何获得另一个带有标志的对象?

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

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

            }

        }
    }
}
4

2 回答 2

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;
            }
        }
    }
}
于 2012-11-13T02:05:17.893 回答
1

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

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

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

于 2012-11-13T03:14:39.863 回答