2015-05-17 7 views
-1

У меня есть 2 массива,IOS Сравнить 2 NSArray

array1: У меня есть 3 объекта.

array2: У меня есть 4 объекта.

Я хочу сравнить каждый объект в 2 массивах.

Это мой код:

for (int i = 0; i < check1.count; i++) { 
    for (int j = 0; j < check2.count; j++) { 
     if ([[check1 objectAtIndex:i] isEqualToArray:[check2 objectAtIndex:j]]) 
     { 
      NSLog(@"same"); 
      [cellContact.iconnewmessage setHidden:NO]; 
     } 
    } 
} 

Но я встретил ошибку: 'NSInvalidArgumentException', причина: '- [__ подсчитывать NSCFString]: непризнанные селектор направил к экземпляру 0x7b97d280'

+3

У вас нет двух массивов. Либо 'check1', либо' check2' на самом деле указывает на 'NSString'. –

+0

Вам нужно определить, что вы хотите сделать, прежде чем сможете его закодировать. Вы хотите узнать, соответствует ли какой-либо из объектов одного массива любому из объектов другого массива? Если это так, вы можете использовать написанный вами подход, хотя вы можете использовать логику для выхода из циклов. Если вы хотите увидеть, имеют ли массивы точно такое же содержимое, то нет смысла сравнивать массив из 3 объектов с массивом из 4 объектов. С самого начала мы знаем, что массивы не равны. –

+0

Пример: Если Array1 имеет один объект с массивом Array2, NSLog 1. Если у Array1 есть 2 объекта с массивом Array2, NSLog 2. –

ответ

0

Вы можете использовать этот код:

int similarObjects = 0; 

for (int i=0;i < array1.count;i++) 
{ 
    if ([array2 containsObject:array1[i]]) 
    { 
     NSLog(@"both contains:%@", array1[i]); 

     similarObjects++; 
    } 
} 
NSLog(@"similarObjects :%d", similarObjects); 
0

Я не «т действительно знаю, что вы хотите сделать .. но если вы хотите, чтобы сравнить значения по одному на индекс ..

NSArray *array1 = @[@1,@2,@3,@4]; 
NSArray *array2 = @[@1,@5,@6]; 

for (int i=0;i < array1.count;i++) 
{ 
    if (array2.count > i) 
     if (array1[i] == array2[i]) 
     { 
      NSLog(@"Same:%@ at index:%d", array1[i], i); 
     } 
} 

// если проверка conten ц

//for counting similar objects 
int similarObjects = 0; 

for (int i=0;i < array1.count;i++) 
{ 
    if ([array2 containsObject:array1[i]]) 
    { 
     NSLog(@"both contains:%@", array1[i]); 

     similarObjects++; 
    } 
} 
NSLog(@"similarObjects :%d", similarObjects); 

путем check1 в коде не является массивом, и это вызывает ошибку .. надеюсь, что это помогло

0

Там нет необходимости чтобы переопределить то, что каркас может по своей сути сделать.

if([[NSSet setWithArray:check1] intersectsSet:[NSSet setWithArray:check2]]) 
{ 
    NSLog(@"same"); 
    [cellContact.iconnewmessage setHidden:NO]; 
} 

Если вы хотите перебрать массив в целом, то использовать for(ObjectType *object in array), не держат некоторые ручной индекс счетчика. NSArray s не имеют гарантированной сложности для произвольного доступа.

Чтобы получить доступ к элементу i в массиве, просто используйте array[i].

Смежные вопросы