2013-03-25 3 views
0

Я хочу сравнить два массива со следующей настройкой, но не знаю, как использовать код.Сравнение двух массивов?

Имейте один массив, arrayOne, сравните с другим массивом arrayTwo.

Как только разница между двумя массивами будет найдена, добавьте эти различия в arrayOne и удалите все из arrayTwo.

Как это можно сделать?

ответ

4

Если массив1 имеет уникальные значения:

NSArray *[email protected][@"A",@"B",@"C",@"D"]; 
NSArray *[email protected][@"A",@"E",@"C"]; 

NSMutableOrderedSet *set1=[[NSMutableOrderedSet alloc]initWithArray:array1]; 
NSMutableOrderedSet *set2=[[NSMutableOrderedSet alloc]initWithArray:array2]; 
[set1 unionOrderedSet:set2]; 

array1=[set1 array]; 
[email protected][]; 

NSLog(@"array1: %@, array2: %@",array1,array2); 

Выход:

массив1: ( А, В, С, Д, Е ), массив2: ( )

Если массив1 не имеет уникальные значения:

NSMutableArray *unionArray=[NSMutableArray arrayWithArray:array1]; 
for (NSString *element in array2) { //compared only for string, if it is some other object need to compare them. 
    if (![array1 containsObject:element]) { 
     unionArray[unionArray.count]=element; 
    } 
} 
array1=unionArray; 
[email protected][]; 
NSLog(@"array1: %@, array2: %@",array1,array2); 

Выход:

массив1: ( А, В, С, D , А, Е ), array2:()

+0

Это будет работать при условии, что каждый элемент 'array1' уникален. Аккуратный трюк, хотя и сохранить порядок. –

+0

@CarlVeazey: обновлено для обоих (отсортировано или несортировано). –

+0

@Vishal: Так почему я должен держать мой один там;) –

0

Попробуйте это. Надеюсь, это поможет вам.

NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"One", @"Two", @"Three", nil]; 

NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"Two", @"Four", @"One", nil]; 

NSMutableArray *intermediate = [NSMutableArray arrayWithArray:array2]; 

[intermediate removeObjectsInArray:array1]; 

for(int i = 0; i < [intermediate count]; i++) 
{ 
    [array1 addObject:[intermediate objectAtIndex:i]]; 
} 
+0

OutPut: один, два, три, три ..... это правильно? – TheTiger

+0

Жаль мою ошибку. Я отредактировал ответ. это OutPut: один, два, три, четыре. – Ayaz

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