1.简单的计算
下面是一个简单的数组(其实也并不是那么简单)
NSArray *testArray = @[@"1", @"1", @1, @"hehe"];
接着,我又定义了几个 NSNumber,然后打印信息
NSNumber *sum = [testArray valueForKeyPath:@"@sum.floatValue"];
NSNumber *avg = [testArray valueForKeyPath:@"@avg.floatValue"];
NSNumber *max = [testArray valueForKeyPath:@"@max.floatValue"];
NSNumber *min = [testArray valueForKeyPath:@"@min.floatValue"];
NSLog(@"\n%@\n%@\n%@\n%@\n", sum, avg, max, min);
上面依次打印了这个数组的和,平均数,最大值,最小值。输出如下
3
0.75
1
0
计算过程中,NSString 和 NSNumber类型的数字都是可以直接计算的,特别的 @"hehe",在计算过程中是按 @0 来处理了
2.数组内部去重
这里有一个重要的参数 distinctUnionOfObjects
NSLog(@"\n%@", [testArray valueForKeyPath:@"@distinctUnionOfObjects.self"]);
打印结果:
1,
hehe,
1
为了证明确实是去重了,而不是去掉了第三个元素 @1(其实我并不关心这个,我只是很在意帮我做了排序),我打印一对应的元素类型:
for (id temp in [testArray valueForKeyPath:@"@distinctUnionOfObjects.self"]) {
NSLog(@"class:%@",NSStringFromClass([temp class]));
}
输出的三个了类型分别是:__NSCFConstantString, __NSCFConstantString, __NSCFNumber。也就是说去掉了一个字符型的1,然后做了一个这样(所以是哪样?)的排序。
3.数组合并的问题
数组合并是一个比较长常见的问题,我们写两个简单数组
NSArray *temp1 = @[@3, @2, @2, @1];
NSArray *temp2 = @[@3, @4, @5];
通常的合并有两种:去重合并和直接合并。我就直接写在打印方法里了:
NSLog(@"\n%@",[@[temp1, temp2] valueForKeyPath:@"@distinctUnionOfArrays.self"]);
NSLog(@"\n%@",[@[temp1, temp2] valueForKeyPath:@"@unionOfArrays.self"]);
输出两个数组:( 5, 1, ** 2,** 3, 4 ), ( 3, 2, 2, 1, 3, 4, 5 )。
注意:我感觉也很少有人会用这种方法直接合并数组的,只是提供一种思路,反正我是不会这么写。