如何将NSMutableArray与c数组进行比较?

时间:2014-09-29 21:51:11

标签: ios objective-c arrays

我有一个NSMutableArray,我想针对多个“Win”案例进行测试。 意思是,我想针对NSMutableArray测试每个3个整数C数组,并查看在C数组中找到的int是否在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};

我想测试数组winCaseHorizo​​ntal1中的数字,看看我的NSMutableArray中是否找到了这些数字。

我读过关于测试两个NSMutableArrays是否相等的测试,但这是完全不同的。 一;这是将c数组与NSMutable进行比较, 二;我不在乎它们是否相等,我只是想看看是否在NSMutable中找到了c数组int。

提前感谢您的帮助!

1 个答案:

答案 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
  }