概述
数组的 valueforkey方法.
苹果的官方解释
Returns an array containing the results of invoking valueForKey: using key on each of the array’s objects.
在数组每一个元素上使用valueforkey: 获得的结果以数组形式返回.
也就是说数组会遍历所有元素, 对每一个元素都执行一次valueforkey:并将结果以数组形式返回.
下面我们来测试一下
测试一
1. 如果数组里是字典, 会找到以key为键的value. 请注意观察打印结果, 只是将value1打印. 并没将dic1 全部打印.
self.array = [NSMutableArray new];
NSDictionary *dic1 = @{@"key1" : @"value1", @"key3" : @"value3"};
NSDictionary *dic2 = @{@"key2" : @"value2"};
[self.array addObject:dic1];
[self.array addObject:dic2];
id value1 = [self.array valueForKey:@"key1"] ;
NSLog(@"value 取到的数据是 %@", value1);
打印结果
2017-07-22 18:06:30.203 learnSDWebImage[1577:98718] value 取到的数据是 (
value1,
"<null>"
)
测试二
2. 数组里装的是对象. 因为对象的变量本身也是以键值对的方式保存, 所以结果和字典一样,都能取出来.
ChildClassOne *oneChild = [ChildClassOne new];
oneChild.myName = @"oneChild";
ChildClassOne *twoChild = [ChildClassOne new];
twoChild.myName = @"twoChild";
[self.array addObject:oneChild];
[self.array addObject:twoChild];
id value1 = [self.array valueForKey:@"myName"] ;
NSLog(@"value 取到的数据是 %@", value1);
2017-07-22 18:21:22.153 learnSDWebImage[1685:109150] value 取到的数据是 (
oneChild,
twoChild
)
测试三
3. 数组里装的是sub数组, sub数组内部还有字典.官方的解释是对每个元素都调用一次valueforkey, 那么结果应该也是可以打印出值的.
self.array = [NSMutableArray new];
NSDictionary *dic1 = @{@"key1" : @"value1", @"key3" : @{@"key1" : @"value3"}};
NSDictionary *dic2 = @{@"key2" : @"value2", @"key3" : @{@"key1" : @"value4"}};
NSArray *subAry = @[@{@"key1" : @"value5"}];
[self.array addObject:dic1];
[self.array addObject:dic2];
[self.array addObject:subAry];
id value1 = [self.array valueForKey:@"key1"] ;
NSLog(@"value 取到的数据是 %@", value1);
打印结果
2017-07-22 18:30:18.101 learnSDWebImage[1831:116475] value 取到的数据是 (
value1,
"<null>",
(
value5
)
)
请注意看1. value3和value4没有打印出来. 说明对字典调用valueforkey时是不会去检查子value里的数据的, 这是很正常的逻辑. 2. value5 是用数组封装起来的, 感觉内部应该是用了递归.
最后
以上就是孤独狗为你收集整理的数组的valueforkey方法的全部内容,希望文章能够帮你解决数组的valueforkey方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复