iOS-使用KVC的聚合运算

KVC支持的聚合运算

  • sum 求和
  • max 最大值
  • min 最小值
  • avg 平均值
  • count 数量

使用方法

新建一个类Person,里面存放一个属性age

#import <Foundation/Foundation.h>

@interface Person : NSObject

/** 年龄 */
@property (nonatomic, assign) NSUInteger age;

@end

创建一个数组,存放Person对象

NSMutableArray<Person *> *persons = [NSMutableArray array];
for (int i = 1; i <= 5; i++) {
    Person *p = [[Person alloc] init];
    p.age = i;
    [persons addObject:p];
}

使用@sum @min @max @avg @count进行聚合运算

NSInteger sum = [[persons valueForKeyPath:@"@sum.age"] integerValue];
NSInteger min = [[persons valueForKeyPath:@"@min.age"] integerValue];
NSInteger max = [[persons valueForKeyPath:@"@max.age"] integerValue];
float avg = [[persons valueForKeyPath:@"@avg.age"] floatValue];
NSInteger count = [[persons valueForKeyPath:@"@count.age"] integerValue];

NSLog(@"sum=%zd", sum);
NSLog(@"min=%zd", min);
NSLog(@"max=%zd", max);
NSLog(@"avg=%g", avg);
NSLog(@"count=%zd", count);

打印结果

打印结果

数组中直接存放数值的情况

直接使用@运算符.floatValue

NSArray<NSNumber *> *arr = @[@1, @2, @3, @4];
NSNumber *avg = [arr valueForKeyPath:@"@avg.floatValue"];
NSNumber *sum = [arr valueForKeyPath:@"@sum.integerValue"];
NSLog(@"avg=%@", avg);
NSLog(@"sum=%@", sum);

打印结果

打印结果

原文地址:https://www.cnblogs.com/lancely/p/5782793.html