Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get array of property value of each object in another array without a for loop

This might be a basic question, but I can't seem to find an answer.

Suppose I have an NSArray (carArray) with objects of a certain type (Car).

Is it possible to get an NSArray (colorArray) with all values of a property (color) of these objects without iterating carArray with a for loop? (cfr. LINQ in .NET)

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

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

Thanks in advance.

like image 758
Niels R. Avatar asked Mar 27 '12 13:03

Niels R.


2 Answers

Yes. Assuming that your object is adopting the KVC/KVO protocol. You can get an array of the properties like:

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

Actually, what valueForKey: method does, is to return an array containing the results of invoking valueForKey: using key on each of the array's objects. (From Apple's Documentation on NSArray)

like image 61
Alladinian Avatar answered Nov 09 '22 23:11

Alladinian


Yes. You can do that without iterating it.

NSArray *colorArray = [carArray valueForKeyPath:@"@distinctUnionOfObjects.color"];
like image 16
Vignesh Avatar answered Nov 10 '22 00:11

Vignesh