Подтвердить что ты не робот

Objective-C - Как сравнить массивы и извлечь разницу?

Возможный дубликат: comparing-two-arrays

У меня есть два NSArray, и я хотел бы создать новый массив с объектами из второго массива, но не включен в первый массив.

Example:

NSMutableArray *firstArray = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSMutableArray *secondArray = [NSMutableArray arrayWithObjects:@"Bill", @"Paul", nil];

The resulting array should be: 

[@"Paul", nil];

Я решил эту проблему с двойным циклом, сравнивающим объекты с внутренним.

Есть ли лучшие решения?

4b9b3361

Ответ 2

Если дублирующиеся элементы имеют значительную значимость в массивах не, вы можете использовать операцию minusSet: NSMutableSet:

NSMutableArray *firstArray = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSMutableArray *secondArray = [NSMutableArray arrayWithObjects:@"Bill", @"Paul", nil];

NSSet *firstSet = [NSSet setWithArray:firstArray];
NSMutableSet *secondSet = [NSMutableSet setWithCapacity:[secondArray count]];
[secondSet addObjectsFromArray:secondArray];

[secondSet minusSet:firstSet]; // result is in `secondSet`

Ответ 3

Я хочу сравнить изображения из двух NSArray. Один массив, я получал от Core Database. Во-вторых, у меня есть постоянные объекты массива.

Я хочу знать, что объект второго массива присутствует в базе данных Core или нет.

Вот код, который я использовал.

// All object from core data and take into array.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"student"];

NSArray *dbresult = [[NSArray alloc]init];
NSError *error;
@try {
    dbresult = [context executeFetchRequest:fetchRequest error:&error];
}
@catch (NSException *exception) {
    NSString *logerror = [NSString stringWithFormat:@"error in fetching Rooms from coredata = %@",exception.description];
NSLog(logerror)
}
@finally {
}

/*
 Get Unused images from list
 */

NSMutableArray *usedImages = [dbresult valueForKey:@"roomImageLocalPath"];

NSMutableSet *fSet = [NSMutableSet setWithArray:usedImages];
NSMutableSet *sSet = [NSMutableSet setWithCapacity:[newImages count]];
[sSet addObjectsFromArray:newImages];
[sSet minusSet:fSet];

NSArray *unusedImages = [secondSet allObjects];
NSLog(@"unusedImages %@",unusedImages);