Как быстро найти массив объектов в Objective-C - PullRequest
11 голосов
/ 05 мая 2010

Есть ли способ в Objective-C для поиска в массиве объектов по свойствам содержащегося объекта, если свойства имеют тип string?

Например, у меня есть объекты NSArray of Person. Person имеет два свойства: NSString * firstName и NSString * lastName.

Каков наилучший способ поиска в массиве, чтобы найти всех, кто соответствует 'Ken' в любом месте в свойствах firstName ИЛИ lastName?

Ответы [ 4 ]

25 голосов
/ 22 февраля 2013

попробуйте что-то вроде этого:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName==%@ OR lastName==%@",@"Ken",@"Ken"];
NSArray *results = [allPersons filteredArrayUsingPredicate:predicate];
21 голосов
/ 05 мая 2010
2 голосов
/ 23 июля 2014

Вы можете просто использовать NSPredicate , чтобы отфильтровать результаты поиска по фактическому массиву результатов:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.property_name contains[c] %@",stringToSearch];
filteredPendingList = [NSMutableArray arrayWithArray:[mainArr filteredArrayUsingPredicate:predicate]];
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"property_name"
                                                 ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [filteredPendingList sortedArrayUsingDescriptors:sortDescriptors];

Таким образом, вы получите отсортированный массив с отфильтрованным результатом. property_name выше - это имя переменной внутри вашего объекта, для которой вы хотите выполнить операцию поиска. Надеюсь, это поможет вам.

0 голосов
/ 05 мая 2010

Вам придется выполнить линейный поиск, сравнивая каждую запись в массиве, чтобы определить, соответствует ли она тому, что вы ищете.

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