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

时间:2012-03-27 13:19:39

标签: objective-c ios

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

假设我有一个NSArray(carArray),其中包含某种类型的对象(Car)。

是否可以使用这些对象的属性(颜色)的所有值来获取NSArray(colorArray),而无需使用for循环迭代carArray? (cfr.LINQ in .NET)

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

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

提前致谢。

3 个答案:

答案 0 :(得分:80)

是。假设您的对象正在采用KVC/KVO protocol。您可以获得一系列属性,如:

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

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

答案 1 :(得分:16)

是。你可以不用迭代就做到这一点。

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

答案 2 :(得分:-1)

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

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