2012-11-13 2 views
0

나는 isFlipped 플래그를 가진 Card 객체를 가지고있다. NSMutableArray에 저장합니다. 배열에있는 두 객체에 플래그가 있는지 확인하고 싶으면 플래그를 제거하고 싶습니다. 내가 아는 한 배열을 반복해야하지만 플래그가있는 다른 객체를 얻는 방법은 무엇입니까?동일한 플래그를 가진 객체에 대해 NSMutableArray를 확인하는 방법은 무엇입니까?

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

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

      } 

     } 
    } 
} 
+0

두 번째를 검색하는 동안 첫 번째 위치는 기억 나십니까? –

+0

@HotLicks 어떻게해야합니까? – Dvole

+0

글쎄, 먼저 루프에 대한 일반 색인 생성을 사용하므로 루프 색인이 있습니다. 그런 다음 "flag 1 index"값을 -1로 설정하십시오. 첫 번째 깃발을 찾으려면 스캔하십시오. "플래그 1 색인"이 -1 인 경우, 현재 색인으로 변경하고 스캔을 계속하십시오. "플래그 1 인덱스"가 -1이 아니면 플래그 인덱스 값이 모두 있습니다. –

답변

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

NSArray 메서드 인 indexesOfObjectsPassingTest :를 사용합니다. 당신은 다음과 같이 사용할 수 있습니다 :

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

이 2보다 더있을 수 있다면, 그래서, 그 isFlipped은 YES 모든 카드를 제거하고 당신은 단지 2를 제거 할 것입니다, 당신은 반복해야 할 것입니다 indexSet을 제거한 후 중지하십시오.

관련 문제