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 )。
注意:我感覺也很少有人會用這種方法直接合并數組的,只是提供一種思路,反正我是不會這么寫。