Использование NSSet / NSMutableSet для фильтрации объектов? - PullRequest
2 голосов
/ 19 октября 2010

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

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;
   ...
}

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

1 Ответ

4 голосов
/ 19 октября 2010

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

Вот быстрый и грязный образец из документации. Также проверьте этот ТАК вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...