Remover duplicatas da matriz comparando as propriedades de seus objetos

Suponha que eu tenha uma classe Event e tenha 2 propriedades: action (NSString) e date (NSDate).

E suponha que eu tenha uma matriz de objetos Event. O problema é que as propriedades de "data" podem corresponder.

Eu preciso remover as duplicatas, o que significa que dois objetos diferentes com a mesma data é uma duplicata.

Eu posso remover duplicatas em qualquer matriz de strings ou nsdates, eles são fáceis de comparar. Mas como fazer isso com objetos complexos, onde suas propriedades devem ser comparadas?

Não me pergunte o que eu fiz até agora, porque a única coisa que vem em minha mente é uma espécie de bolha,mas é uma solução novata e lenta.

Qualquer ajuda é muito apreciada (links, tuts, code).

Desde já, obrigado.

EDITAR

Graças a dasblinkenlight, eu fiz um método personalizado:

- (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];
} 

AquiYourClass é o nome da sua classe a que o objeto pertence epropertyName é a propriedade desse objeto que você vai comparar.

Suponha que self.arrayWithObjects contenha os objetos de YourClass.

Depois de preenchê-lo, use

self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];

e você está feito.

Todos os créditos para dasblinkenlight. Felicidades!

questionAnswers(6)

yourAnswerToTheQuestion