Получить массив значений свойств каждого объекта в другом массиве без цикла 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];