0

isFlipped フラグを持つ Card オブジェクトがあります。それらを NSMutableArray に保存します。配列内の 2 つのオブジェクトにフラグが設定されているかどうかを確認し、設定されている場合は削除します。私が理解している限り、配列を反復処理する必要がありますが、フラグを持つ別のオブジェクトを取得するにはどうすればよいですか?

- (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 メソッドの indexsOfObjectsPassingTest: を使用します。次のように使用できます。

    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 に答える