KVC Collection Operators

在介绍集合操作符强大的功能前我们先来看一下它的格式要求


KVC Collection Operators_第1张图片
1.png

简单的集合操作符

@avg 求均值

@interface People : NSObject
@property (nonatomic, copy) NSString *property;
- (instancetype)initWithProperty:(NSString *)property;
@end
- (void)viewDidLoad {
    People *zhanSan = [[People alloc]initWithProperty:@"3.5"];
    [array addObject:zhanSan]; 
    People *liSi = [[People alloc]initWithProperty:@"4"];
    [array addObject:liSi];    
    NSNumber *averageMoney = [array valueForKeyPath:@"@avg.property"];//结果是3.75
}

这里做个说明
Left key path 是可以省略的,一般情况下都省略
这个例子中的集合操作符是@avg
Right key path这里指定了是property财产这个属性,这一个是不可以省略的除了当使用@count时
可能有人会提出疑问,property不是NSString类型的吗,怎么会计算除了均值呢,这里它会默认转换成double类型,而返回值是NSNumber类型的。
留一个小练习:计算出一个数组中各元素的均值
@count
NSNumber *count = [array valueForKeyPath:@"@count"];//结果是2
除此外还有@sum,@max,@min

对象操作符

@distinctUnionOfObjects

    NSArray *data = @[@"1", @"1", @"3"];
    NSNumber *count = [data valueForKey:@"@count"];
    NSArray *dataAfterOperation = [data valueForKeyPath:@"@distinctUnionOfObjects.self"];//结果是1,3

这个操作符会删除掉重复的元素,是不是很方便啊
@unionOfObjects

    NSArray *data = @[@"1", @"3", @"1"];
    NSNumber *count = [data valueForKey:@"@count"];
    NSArray *dataAfterOperation = [data valueForKeyPath:@"@unionOfObjects.self"];//结果是1,3,1

这个操作不会去重,如数组中放了很多个People,而你只想获得这些人的名字的时候就可以用这个操作符了

数组和集合操作符

如果数组中嵌套了数组应该怎么办呢?
@distinctUnionOfArrays

    NSMutableArray *array = [NSMutableArray new];
   
    NSMutableArray *array1 = [NSMutableArray new];
    
    People *zhanSan1 = [[People alloc]initWithProperty:@"3.5"];
    People *liSi1 = [[People alloc]initWithProperty:@"4"];
    [array1 addObject:zhanSan1];
    [array1 addObject:liSi1];
    
    NSMutableArray *array2 = [NSMutableArray new];

    People *zhanSan2 = [[People alloc]initWithProperty:@"5"];
    People *liSi2 = [[People alloc]initWithProperty:@"4"];
    [array2 addObject:zhanSan2];
    [array2 addObject:liSi2];
    
    [array addObject:array1];
    [array addObject:array2];
    
    NSArray *results= [array valueForKeyPath:@"@distinctUnionOfArrays.property"];//结果是3.5,4,5

除此之外还有@unionOfArrays,@unionOfArrays,@distinctUnionOfSets
推荐阅读
KVC Collection Operators

你可能感兴趣的:(KVC Collection Operators)