開發(fā)中獲取數(shù)組中最大/最小值會先進(jìn)行排序再取值.
獲取數(shù)組的平均值會求和取平均,略顯麻煩.
其實(shí)iOS中可以利用KVC實(shí)現(xiàn), 還可以批量調(diào)用方法,批量獲取返回值.
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];
// 轉(zhuǎn)為int類型后再轉(zhuǎn)為string類型
NSArray *resultArray = [array valueForKeyPath:@"intValue.stringValue"];
// 轉(zhuǎn)為int類型后再轉(zhuǎn)為string類型再求每個(gè)string的長度
NSArray *lengthArray = [array valueForKeyPath:@"intValue.stringValue.length"];
NSArray *stringArray = [NSArray arrayWithObjects:@"NameS",@"CHEN", @"WoShiShui", nil];
// string數(shù)組轉(zhuǎn)大寫
NSArray *resultArray = [stringArray valueForKeyPath:@"uppercaseString"];
可以看出, KVC可以做到讓元素依次調(diào)用某方法并將返回值放入新的數(shù)組返回. 系統(tǒng)的方法可以如此調(diào)用,猜想自定義方法也可行, 驗(yàn)證如下:
// 在 NSNumber 分類中擴(kuò)展一個(gè)判斷正負(fù)的方法
@implementation NSNumber (Extension)
- (BOOL)isPositiveNumber {
if ([self floatValue] > 0) return YES;
else return NO;
}
// 用 NSNumber 數(shù)組檢驗(yàn)
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個(gè)元素類型: %@, 值: %@", i + 1, [reuslts[i] class],reuslts[i]);
}
打印結(jié)果:
2016-09-17 20:41:40.204 Test [2957:502894] 第1個(gè)元素類型: __NSCFBoolean, 值: 1
2016-09-17 20:41:40.204 Test [2957:502894] 第2個(gè)元素類型: __NSCFBoolean, 值: 0
2016-09-17 20:41:40.205 Test [2957:502894] 第3個(gè)元素類型: __NSCFBoolean, 值: 1
返回值是BOOL類型, 結(jié)果正捉兴、負(fù)屁擅、正, 驗(yàn)證正確.
這個(gè)特性值得利用到程序的設(shè)計(jì)中去,想想都覺得能玩出很多"花樣"來.
覺得有用的猿友們點(diǎn)個(gè)贊嘍??.