数组的valueforkey方法

数组的 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 是用数组封装起来的, 感觉内部应该是用了递归.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值