获取另一个数组中每个对象的属性值的数组,而不使用for循环

这可能是一个基本的问题,但我似乎无法find答案。

假设我有一个具有特定types的对象(Car)的NSArray(carArray)。

是否有可能得到一个NSArray(colorArray)与所有这些对象的属性(颜色)值没有迭代carArray for循环? (比较.NET中的LINQ)

NSMutableArray *colorList = [[NSMutableArray alloc] initWithCapacity:0]; for (Car *car in carArray) { [colorList addObject:car.color]; } 

提前致谢。

是。 假设您的对象正在采用KVC / KVO协议 。 你可以得到像这样的属性数组:

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

实际上, valueForKey:方法的作用是返回一个数组,其中包含调用每个数组对象的valueForKey:使用的结果。 (从Apple的NSArray文档)

是。 你可以做到这一点,而不是迭代它。

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

您可以使用NSSet来获取颜色:

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