取一个员工列表里的工资平均值,大部分人会这么写

double totalSalary = 0.0;
for (Employee *employee in employees) {
  totalSalary += [employee.salary doubleValue];
}
double averageSalary = totalSalary / [employees count];

// but!只需要这样写
[employees valueForKeyPath:@"@avg.salary"];
// 还有!
[products valueForKeyPath:@"@count"]; // 数组长度
[products valueForKeyPath:@"@sum.price"]; // 总钱数
[products valueForKeyPath:@"@avg.price"]; // 平均钱数
[products valueForKeyPath:@"@max.price"]; // 最大钱数
[products valueForKeyPath:@"@min.launchedOn"]; // 最后的启动时间

[inventory valueForKeyPath:@"@unionOfObjects.name"]; //取数组中对象的某一个属性组成数组
[inventory valueForKeyPath:@"@distinctUnionOfObjects.name"];//同上,并去重

出自http://nshipster.cn/kvc-collection-operators/