获取另一个数组中每个对象的属性值的数组,而不使用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];