Получить массив значений свойств каждого объекта в другом массиве без цикла for

Это может быть основной вопрос, но я не могу найти ответ.

Предположим, что у меня есть NSArray (carArray) с объектами определенного типа (Car).

Можно ли получить NSArray (colorArray) со всеми значениями свойства (цвета) этих объектов без итерации carArray с циклом for? (cfr. LINQ в .NET)

NSMutableArray *colorList = [[NSMutableArray alloc] initWithCapacity:0];

for (Car *car in carArray)
{
    [colorList addObject:car.color];
}

Спасибо заранее.

Ответ 1

Да. Предполагая, что ваш объект принимает протокол KVC/KVO. Вы можете получить массив таких свойств, как:

NSArray *colorList = [carArray valueForKey:@"color"];

На самом деле, что делает метод valueForKey:, это вернуть массив, содержащий результаты вызова valueForKey:, используя ключ для каждого из объектов массива. (Из документации Apple на NSArray)

Ответ 2

Да. Вы можете сделать это без повторения этого.

NSArray *colorArray = [carArray valueForKeyPath:@"@distinctUnionOfObjects.color"];

Ответ 3

Вы можете использовать NSSet, чтобы получить цвета:

NSSet *NScolors = [NSSet setWithArray:[carArray valueForKey:@"color"]];
NSArray *colors = [NScolors allObjects];