Как искать NSSet или NSArray для объекта, который имеет определенное значение для определенного свойства?

Как искать NSSet или NSArray для объекта, который имеет определенное значение для определенного свойства?

Пример: у Меня есть NSSet с 20 объектами, и каждый объект имеет type свойство. Я хочу получить первый объект, который имеет [theObject.type isEqualToString:@"standard"].

Я помню, что было возможно использовать предикаты так или иначе для этого вида материала, правильно?

51
задан dontWatchMyProfile 19 June 2010 в 06:16
поделиться

3 ответа

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type == %@", @"standard"];
NSArray *filteredArray = [myArray filteredArrayUsingPredicate:predicate];
id firstFoundObject = nil;
firstFoundObject =  filteredArray.count > 0 ? filteredArray.firstObject : nil;

NB: Понятие первого найденного объекта в NSSet не имеет смысла, поскольку порядок объектов в наборе не определен.

78
ответ дан 7 November 2019 в 09:59
поделиться
NSArray* results = [theFullArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.type LIKE[cd] %@", @"standard"]];
4
ответ дан 7 November 2019 в 09:59
поделиться

Вы можете получить фильтрованный массив, как описали Джейсон и Оле, но поскольку вам нужен только один объект, я бы использовал - indexOfObjectPassingTest: (если он находится в массиве) или -objectPassingTest: (если он находится в наборе) и не создавал второй массив.

17
ответ дан 7 November 2019 в 09:59
поделиться