@ Ответ AliSoftware - интересный подход. NSPredicate
довольно медленно за пределами Core Data, но это часто хорошо. Если производительность является проблемой, вы можете реализовать тот же алгоритм с циклом, который состоит из нескольких строк кода, но, как правило, быстрее.
Другой подход заключается в том, чтобы спросить, всегда ли два человека с одинаковым идентификатором должны считаться эквивалентными. Если это так, тогда вы можете переопределить isEqual:
и hash
для своего класса person следующим образом (при условии, что identifier
является NSUInteger):
- (BOOL)isEqual:(id)other {
if ([other isMemberOfClass:[self class]) {
return ([other identifier] == [self identifier]);
}
return NO;
}
- (NSUInteger)hash {
return [self identifier];
}
При этом все операции NSSet
будут обрабатывать объекты с одинаковым идентификатором как равные, поэтому вы можете использовать minusSet
. Также NSMutableSet addObject:
автоматически будет уникальным для вас по идентификатору.
Реализация isEqual:
и hash
имеет далеко идущие последствия, поэтому вам нужно убедиться, что везде, где вы встречаете два объекта человека с одинаковым идентификатором, они должны рассматриваться как равные. Но если это ваш случай, это значительно упрощает и ускоряет ваш код.