1.簡單的計算
下面是一個簡單的數(shù)組(其實也并不是那么簡單)
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);
上面依次打印了這個數(shù)組的和,平均數(shù)追逮,最大值,最小值粹舵。輸出如下
3
0.75
1
0
計算過程中,NSString 和 NSNumber類型的數(shù)字都是可以直接計算的互婿,特別的 @"hehe",在計算過程中是按 @0 來處理了
2.數(shù)組內(nèi)部去重
這里有一個重要的參數(shù) distinctUnionOfObjects
NSLog(@"\n%@", [testArray valueForKeyPath:@"@distinctUnionOfObjects.self"]);
打印結(jié)果:
1,
hehe,
1
為了證明確實是去重了秫筏,而不是去掉了第三個元素 @1(其實我并不關(guān)心這個,我只是很在意幫我做了排序),我打印一對應(yīng)的元素類型:
for (id temp in [testArray valueForKeyPath:@"@distinctUnionOfObjects.self"]) {
NSLog(@"class:%@",NSStringFromClass([temp class]));
}
輸出的三個了類型分別是:__NSCFConstantString, __NSCFConstantString, __NSCFNumber。也就是說去掉了一個字符型的1漾峡,然后做了一個這樣(所以是哪樣?)的排序信殊。
3.數(shù)組合并的問題
數(shù)組合并是一個比較長常見的問題挽绩,我們寫兩個簡單數(shù)組
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"]);
輸出兩個數(shù)組:( 5, 1, ** 2,** 3, 4 ), ( 3, 2, 2, 1, 3, 4, 5 )堰塌。
注意:我感覺也很少有人會用這種方法直接合并數(shù)組的赵刑,只是提供一種思路,反正我是不會這么寫场刑。