2014-09-29 5 views
-1

NSMutableArray가 있고 여러 "Win"사례에 대해 테스트하고 싶습니다. 내가 원하는NSMutableArray와 C 배열을 어떻게 비교할 수 있습니까?

// horizontal 
int winCaseHorizontal1[3] = {9, 1, 2}; 
int winCaseHorizontal2[3] = {3, 4, 5}; 
int winCaseHorizontal3[3] = {6, 7, 8}; 

// verticle 
int winCaseVerticle1[3] = {9, 3, 6}; 
int winCaseVerticle2[3] = {1, 4, 7}; 
int winCaseVerticle3[3] = {2, 5, 8}; 

// diaganol 
int winCaseDiagonal1[3] = {9, 4, 8}; 
int winCaseDiagonal2[3] = {2, 4, 6}; 

: 의미는, 내가있는 NSMutableArray에 대해 각 3 정수 C 배열을 테스트하고 C 배열에있는 int 치의가있는 NSMutableArray

에서 발견되는 경우 이러한 내 C 배열되어보고 싶어 숫자를 테스트하려면 배열 winCaseHorizontal1에 말하고 그 숫자가 NSMutableArray에 있는지 확인하십시오.

두 개의 NSMutableArrays가 같은지 테스트 해 보았습니다.하지만 이것은 매우 다릅니다. 하나; 이것은 c 배열을 NSMutable과 비교하는 것입니다. Two; 만약 그들이 동등한 상관 없어, 난 그냥 C 배열 ints NSMutable에서 찾을 수 있는지보고 싶다.

미리 도움을 청하십시오!

+0

명백한 코드를 작성해야합니다. –

답변

1

배열을 반복 할 수 있으며 요소가 NSMutableArray에 있는지 확인할 수 있습니다.

-(BOOL)elementFound{ 

for(NSNumber *number in mutableArray) 
{ 
    for(int i = 0; i < sizeof(winCaseHorizontal1)/sizeof(int); i++) 
    { 
    if([number integerValue] == winCaseHorizontal1[i]){ 
     return YES; 
    } 
    } 



    for(int i = 0; i < sizeof(winCaseHorizontal2)/sizeof(int); i++) 
    { 
    if([number integerValue] == winCaseHorizontal2[i]){ 
     return YES; 
    } 
    } 


    for(int i = 0; i < sizeof(winCaseHorizontal3)/sizeof(int); i++) 
    { 
    if([number integerValue] == winCaseHorizontal3[i]){ 
     return YES; 
    } 
    } 

//other arrays 
} 
    return NO; 
} 

당신은 당신이 다른 배열을 만들고 그 배열의 인덱스 또는 요소를 추가하고 기능의 끝에서 반환 할 수있는 것보다 당신의 C 배열에있는 인덱스 또는 요소를합니다.

편집 : BryanChen 그 만들 및 C 배열에서 NSSet 및 mutableArray 요소가하지의 존재 여부를 확인하다 할 수있는 빠른 방법을 제안한 것처럼.

NSMutableSet *winCaseHorizontalSet1 = [[NSMutableSet alloc] init]; 
    for(int i = 0; i < sizeof(winCaseHorizontal1)/sizeof(int); i++) 
    { 
    [winCaseHorizontalSet1 addObject:@(winCaseHorizontal1[i])]; 
    } 


    for(NSNumber *number in mutableArray) 
    { 
    BOOL isContain = [winCaseHorizontalSet1 containsObject:number]; 
    if(isContain) return YES; 

    //other set of c arrays 
    } 
+0

이것은 매우 느린 방법입니다. 존재를 테스트하고 싶다면'NSSet'을 사용하십시오. –

+0

@BryanChen @ BryanChen 감사하지만 NSSet에 C 배열을 넣으려면 모든 배열을 반복해야하거나 C 배열에서 NSSet을 만드는 다른 방법이 있습니다 – codester

+0

일단 모든 배열을 한 번 반복하고 NSSet을 저장하면됩니다. –

관련 문제