Ответ 1
[secondArray removeObjectsInArray:firstArray];
Эта идея была взята из другого ответа.
Возможный дубликат: 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];
Я решил эту проблему с двойным циклом, сравнивающим объекты с внутренним.
Есть ли лучшие решения?
[secondArray removeObjectsInArray:firstArray];
Эта идея была взята из другого ответа.
Если дублирующиеся элементы имеют значительную значимость в массивах не, вы можете использовать операцию 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`
Я хочу сравнить изображения из двух 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);