美文网首页
iOS开发中和 valueForKeyPath 有关的一些简单

iOS开发中和 valueForKeyPath 有关的一些简单

作者: 尼克name | 来源:发表于2016-08-21 22:35 被阅读0次

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 )
注意:我感觉也很少有人会用这种方法直接合并数组的,只是提供一种思路,反正我是不会这么写。

相关文章

网友评论

      本文标题:iOS开发中和 valueForKeyPath 有关的一些简单

      本文链接:https://www.haomeiwen.com/subject/bdjwsttx.html