2010-10-19 3 views
2

Я видел несколько вопросов/ответов относительно объектов фильтра с помощью NSSet/NSMutableSet. В этих случаях используются простые типы объектов, такие как NSString или int. Ниже приведен пример кодов, используемых для фильтрации NSString объектов:Использование NSSet/NSMutableSet для фильтрации объектов?

NSSet smallArray = [[NSSet alloc] initWithObjects:@"0", @"1", @"2", nil]; 
NSArray bigArray = [[NSArray alloc] initWithObjects:@"0", @"1", @"4", @"5", ..., nil]; 
NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray]; 
[intersection intersectSet:[NSSet setWithArray:bigArray]; 
NSArray *result = [NSArray arrayWithSet:intersection]; 

Я не знаю, как это работает, если объекты в наборе или массиве являются экземплярами класса Object-C. Возьмем следующий класс:

@interface MyObject: NSObject { 
    int id; 
    NSString *name; 
    NSString *city; 
    ... 
} 

Я не уверен, как установить interetSet набора: работает с объектами вышерасположенного типа. Если я хочу получить пересекающееся множество smallArray объектов MyObject и bigArray, только сравнивая id, я сомневаюсь, могу ли я использовать метод выбора intersetSet:? Если нет, не уверен, должен ли я добавить какой-либо метод к классу MyObject, чтобы набор знал, как сравнивать объекты?

ответ

4

Вам необходимо реализовать isEqual: (а также hash) на MyObject, чтобы, если два объекта «совпадают», то он возвращает YES. Тогда заданный код пересечения должен работать автоматически.

Here's быстрый и грязный образец из документации. Также проверьте this SO question.

+0

Ваш ответ имеет смысл. Я попробую это сначала Спасибо! –

Смежные вопросы