Предположим, что у меня есть класс Event, и он имеет 2 свойства: действие (NSString) и дату (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. Ура!