用KVC获取数组最值/平均值/获取批量返回值等

开发中获取数组中最大/最小值会先进行排序再取值.
获取数组的平均值会求和取平均,略显麻烦.
其实iOS中可以利用KVC实现, 还可以批量调用方法,批量获取返回值.

NSArray *array = [NSArray arrayWithObjects:@"1.2",@"2.1", @"4.9", nil];

// 最大值
CGFloat maxFloat = [[array valueForKeyPath:@"@max.floatValue"] floatValue];

// 最小值
CGFloat minFloat = [[array valueForKeyPath:@"@min.floatValue"] floatValue];

// 平均值
CGFloat avg = [[array valueForKeyPath:@"@avg.floatValue"] floatValue];

// 转为int类型后再转为string类型
NSArray *resultArray = [array valueForKeyPath:@"intValue.stringValue"];

// 转为int类型后再转为string类型再求每个string的长度
NSArray *lengthArray = [array valueForKeyPath:@"intValue.stringValue.length"];

NSArray *stringArray = [NSArray arrayWithObjects:@"NameS",@"CHEN", @"WoShiShui", nil];

// string数组转大写
NSArray *resultArray = [stringArray valueForKeyPath:@"uppercaseString"];

可以看出, KVC可以做到让元素依次调用某方法并将返回值放入新的数组返回. 系统的方法可以如此调用,猜想自定义方法也可行, 验证如下:

// 在 NSNumber 分类中扩展一个判断正负的方法
@implementation NSNumber (Extension)
- (BOOL)isPositiveNumber {
    if ([self floatValue] > 0) return YES;
    else return NO;
}

// 用 NSNumber 数组检验
NSArray *numArray = [NSArray arrayWithObjects:@1.2, @(-2.1), @(10), nil];
NSArray *reuslts = [numArray valueForKeyPath:@"isPositiveNumber"];
for (int i = 0; i < reuslts.count; i++) {
    NSLog(@"第%d个元素类型: %@, 值: %@", i + 1, [reuslts[i] class],reuslts[i]);
}

打印结果:
2016-09-17 20:41:40.204 Test [2957:502894] 第1个元素类型: __NSCFBoolean, 值: 1
2016-09-17 20:41:40.204 Test [2957:502894] 第2个元素类型: __NSCFBoolean, 值: 0
2016-09-17 20:41:40.205 Test [2957:502894] 第3个元素类型: __NSCFBoolean, 值: 1

返回值是BOOL类型, 结果正、负、正, 验证正确.
这个特性值得利用到程序的设计中去,想想都觉得能玩出很多"花样"来.


觉得有用的猿友们点个赞喽😂.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 49,928评论 74 441
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • KVC简单介绍 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...
    公子无礼阅读 1,416评论 0 6
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    Fendouzhe阅读 684评论 0 6
  • 序言 第一部分恋爱与自信的“道” 第一章、核心自信 第1节—自信的根源 第2节—自信与状态 第3节—如何提升核心自...
    迎刃阅读 5,730评论 1 8