我的简书地址:http://www.jianshu.com/p/a6a0abac1c4a
valueForKeyPath
本篇来解说一下那些不为人知,也常常被忽略掉,而且非常有用的KVC干货小技巧
获取数组里的,最大、最小、平均、求和
NSArray *array = @[@"1",@"3",@2,@9.5,@"1.2"];NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"];NSNumber *avg = [array valueForKeyPath:@"@avg.floatValue"];NSNumber *max = [array valueForKeyPath:@"@max.floatValue"];NSNumber *min = [array valueForKeyPath:@"@min.floatValue"];NSLog(@"sum:%@",sum);NSLog(@"avg:%@",avg);NSLog(@"max:%@",max);NSLog(@"min:%@",min);
删除反复数据
NSArray *array = @[@"name", @"w", @"aa", @"zxp", @"aa"];//返回的是一个新的数组NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];NSLog(@"%@", newArray);
相同能够嵌套使用,先剔除name相应值的反复数据再取值
NSArray *array = @[@{@"title":@"zxp",@"name":@"zhangxiaoping"},@{@"title":@"zxp2",@"name":@"zhangxiaoping2"},@{@"title":@"zxp",@"name":@"zhangxiaoping3"},@{@"title":@"zxp",@"name":@"zhangxiaoping"}];
//依据name字段,来进行反复删除。
NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.name"];//假设要依据title字段来删除重名的写法为`@distinctUnionOfObjects.title`
NSLog(@"%@", newArray);
/*print:
(zhangxiaoping3,zhangxiaoping2,zhangxiaoping
)
是一个字符串数组
*/
进行实例方法的调用
NSArray *array = @[@"name", @"w", @"aa", @"ZXPing"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
相当于数组中的每一个成员运行了uppercaseString
方法。然后把返回的对象组成一个新数组返回。既然能够用uppercaseString
方法,那么NSString的其它方法也能够,比方[array valueForKeyPath:@"length"]
。
当然,其它对象的实例方法也能够以此类推来进行调用~。