Получение NSArray одного атрибута из NSArray - PullRequest
9 голосов
/ 11 мая 2011

У меня очень обычный сценарий.

У меня есть NSArray, у которого есть объект пользовательского типа, скажем Person. Класс Person имеет атрибуты: firstName, lastName и age.

Как я могу получить NSArray, содержащий только один атрибут из NSArray, имеющего объекты Person?

Что-то вроде:

NSArray *people;
NSArray *firstNames = [people getArrayOfAttribute:@"firstName" andType:Person.Class]

У меня есть решение написать цикл for и заполнить массив firstNames, но я не хочу этого делать.

Ответы [ 3 ]

22 голосов
/ 11 мая 2011

NSArray будет обрабатывать это для вас, используя KVC

NSArray *people ...;
NSArray *firstName = [people valueForKey:@"firstName"];

Это даст вам массив значений firstName из каждой записи в массиве

1 голос
/ 12 мая 2011

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

NSArray *people;  // assumably has a bunch of people
NSMutableArray *firstNames = [NSMutableArray array];

[people enumerateObjectsUsingBlock: 
 ^(id obj, NSUInteger idx, BOOL*flag){
     // filter however you want...
     [firstNames addObject:[Person firstName]];
 }];

Преимущество в том, что это быстро и эффективно, если у вас есть группа людей ...

1 голос
/ 11 мая 2011

Проверьте filterUsingPredicate: метод в NSMutableArray, в основном вы создаете объект NSPredicate, который будет определять, как будет фильтроваться массив.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html#//apple_ref/doc/uid/TP40001794-CJBDBHCB

Это руководство даст вам обзор и раздел для работы с массивами.

...