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

Nie*_* R. 37 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];
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

All*_*ian 81

是.假设您的对象采用KVC/KVO协议.您可以获得以下属性的数组:

NSArray *colorList = [carArray valueForKey:@"color"];
Run Code Online (Sandbox Code Playgroud)

实际上,有什么valueForKey:方法可以返回一个数组,其中包含在每个数组对象上valueForKey:使用key调用的结果.(来自Apple关于NSArray的文档)


Vig*_*esh 16

是.你可以做到这一点,而无需迭代它.

NSArray *colorArray = [carArray valueForKeyPath:@"@distinctUnionOfObjects.color"];
Run Code Online (Sandbox Code Playgroud)