Codificação de valor-chave em coleções

Um truque muito legal de fazer uma operação de coleta simples é usar a codificação de valor-chave.

Por exemplo, se tivermos uma classe Person:

@interface Person : NSObject

@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSNumber *age;

+ (Person *)personWithFirstName:(NSString *)firstName
lastName
:(NSString *)lastName
age
:(NSNumber *)age;

@end

e uma matriz que contém vários objetos desse tipo:

Person *first = [Person personWithFirstName:@"Jack"
lastName
:@"Doe"
age
:@22];
Person *second = [Person personWithFirstName:@"Jane"
lastName
:@"Doe"
age
:@32];
Person *third = [Person personWithFirstName:@"John"
lastName
:@"Doe"
age
:@41];
NSArray *people = @[first, second, third];

podemos encontrar facilmente a pessoa mais velha / mais jovem ou a idade média das pessoas na matriz:

NSNumber *maxAge = [people valueForKeyPath:@"@max.age"];
NSNumber *minAge = [people valueForKeyPath:@"@min.age"];
NSNumber *avgAge = [people valueForKeyPath:@"@avg.age"];