Удалить дубликаты из массива, сравнивая свойства его объектов
Предположим, у меня есть класс Event, и у него есть 2 свойства: action (NSString) и date (NSDate).
И предположим, у меня есть массив объектов Event. Проблема в том, что "Дата" свойства могут совпадать.
Мне нужно удалить дубликаты, это означает, что 2 разных объекта с одинаковой датой являются дубликатом.
Я могу удалить дубликаты в любом массиве строк или nsdates, их легко сравнивать. Но как это сделать со сложными объектами, где нужно сравнивать их свойства?
Дон»не спрашивайте меня, что я сделал до сих пор, потому что единственное, что приходит мне в голову, это пузырёк,но это'Решение новичка, и медленно.
Любая помощь высоко ценится (ссылки, ссылки, код).
Заранее спасибо.
РЕДАКТИРОВАТЬ
Благодаря dasblinkenlight я сделал собственный метод:
- (NSArray *)removeDuplicatesInArray:(NSArray*)arrayToFilter{
NSMutableSet *seenDates = [NSMutableSet set];
NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
YourClass *e = (YourClass*)obj;
BOOL seen = [seenDates containsObject:e.propertyName];
if (!seen) {
[seenDates addObject:e.when];
}
return !seen;
}];
return [arrayToFilter filteredArrayUsingPredicate:dupDatesPred];
}
ВотYourClass
имя вашего класса, к которому принадлежит объект, иpropertyName
это свойство того объекта, который вы собираетесь сравнивать.
Предположим, что self.arrayWithObjects содержит объекты YourClass.
Заполнив его, используйте
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
и вы сделали.
Все кредиты на dasblinkenlight. Ура!