OC中的字典

NSDictionary字典就是关键字(键)及其定义所构成的集合。字典在给定的关键字下存储一个数值,这个关键字(键)通常是一个NSString类型的字符串,存储的这个数值可以是Object-C里的任意类型的对象。然后你就可以使用这个关键字来找到其对应的值。

字典和数组一样,也分为不可变字典(NSDictionary)和可变字典(NSMutableDictionary)。

NSDictionary

不可变字典的创建及访问:

   /*
         字典:NSDictionary  NSMutableDictionary

         1.概念:字典是关键字 ‘key’及其定义的值(value)所构成的集合,即它是由key-value组成的键值对的集合。'key'一般是'NSString'类型的,'value'是OC中任意对象。对于字典来讲,我们就是通过‘key’来访问‘value’。(字典是无序的)
         2.为什么在有了数组之后,还需要字典?在由大量的数据或者频繁的查找的时候,使用字典效率更高。因为字典采用键查询的优化存储方式。

         */
        //初始化
        //创建一个空的字典
        NSDictionary *dictionary1 = [[NSDictionary alloc] init];
        NSDictionary *dictionary2 = [NSDictionary dictionary];

        //创建只有一个键值对的字典
        NSDictionary *dictionary3 = [NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];

        //创建一个多个键值对的字典
        NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];

        //字典里面存放的元素都要是对象类型才行。如果是基本数据类型,要先把基本数据类型进行封装,然后再放到这些集合中去。比如不能把@25换成25放到字典里去

        //通过字典创建一个字典
        NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
        NSLog(@"%@",dictionary5);

        //使用新语法创建字典
        NSDictionary *dictionary6 = @{};
        //新语法创建只有一个键值对的字典,与dictionary4创建方式顺序相反
        NSDictionary *dictionary7 = @{@"name":@"Rick"};
        //新语法创建多个键值对的字典
        NSDictionary *dictionary8 = @{@"name":@"Rick",@"age":@25,@"address":@"GZ"};
        NSLog(@"%@",dictionary8);

        //从本地读取文件
        NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@"http://www.baidu.com"];
        //从网络读取字典
        NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];

        //字典中键值对的数量
        NSUInteger count = [dictionary4 count];
        NSLog(@"%lu",count);

        //如何访问字典
        //通过key访问字典中对应的值
        NSString *name = [dictionary4 objectForKey:@"name"];

        //新语法
        NSString *newName = dictionary4[@"name"];

        //如何遍历字典中所有的key和value
        //表示字典中所有的key
        NSArray *keyArray = dictionary4.allKeys;
        NSArray *valueArray = dictionary4.allValues;

        //打印key = value,for循环
//        id key,value;
//        for (int i = 0; i < dictionary4.count; i++) {
//            key = [keyArray objectAtIndex:i];
//            value = [dictionary4 objectForKey:key];
//            NSLog(@"%@:%@",key,value);
//        }
        for (int i = 0; i < dictionary4.count; i++) {
            //注意‘[]’的使用,数组加‘[]’就是代表数组里的元素
            NSLog(@"%@:%@",keyArray[i],valueArray[i]);
            }
        //快速枚举
        for (NSString *key in keyArray) {
            NSLog(@"%@:%@",key,dictionary4[key]);//?
        }
        //使用枚举器遍历
        NSEnumerator *enumerator = [keyArray objectEnumerator];
        id key;
        while (key = [enumerator nextObject]) {
            NSLog(@"%@:%@",key,dictionary4[key]);
        }

        NSDictionary *dictionary = @{@"name":@"Rick",@"age":@"25",@"address":@"GZ",@"name":@"Jack"};
        for (NSString *str in dictionary.allKeys) {
            NSLog(@"%@=%@",str,dictionary[str]);
        }
        //注意:在字典中键值对是无序的,如果有两个相同的键值对只会打印一个

NSMutableDictionary

1.可变字典的创建

  /*
         NSMutableDictionary 可变字典


        */

         //1.初始化方式
         //创建一个空的字典
        NSMutableDictionary *mDictionary1 = [NSMutableDictionary dictionary];

         //创建一个有一个键值对的可变字典
        NSMutableDictionary *mDictionary2 = [NSMutableDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
        //
        NSMutableDictionary *mDictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@"age",@"25",@"address",@"GZ", nil];
        //通过另一个字典创建一个字典
        NSMutableDictionary *mDictionary4 = [NSMutableDictionary dictionaryWithDictionary:mDictionary3];

//        mDictionary3.allKeys 访问所有键
//        mDictionary3.allValues 访问所有值

        //可变字典独有的初始化方法
        NSMutableDictionary *mDictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];

        //从本地读取字典
        NSMutableDictionary *mDictionary6 = [NSMutableDictionary dictionaryWithContentsOfFile:@""];
        //从网络读取字典
        NSMutableDictionary *mDictionary7 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];

2.对可变字典的操作

 //操作字典
        //增
        [mDictionary5 setValue:@"Rick" forKey:@"name"];
        [mDictionary5 setValue:@25 forKey:@"age"];

        //改(如果原来的字典中已经有了akey这个键,那么这次新加的值就会覆盖原来的键(akey)对应的值)
        [mDictionary5 setValue:@"Jack" forKey:@"name"];

        mDictionary5[@"name"] = @"Leo";

        //删除指定key对应的对象
        [mDictionary5 removeObjectForKey:@"name"];

        //删除所有对象
        [mDictionary5 removeAllObjects];
        //找出相同值得键,
        NSMutableDictionary *mDictionary8 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address",@"Rick",@"name2",@"Rick",@"name3",nil];

//        for (int i = 0; i < mDictionary8.count; i++) {
//            
//            if ([mDictionary8.allValues[i]  isEqual: @"Rick"]) {
//                NSLog(@"%@",mDictionary8.allKeys[i]);
//            }
//            else if ([mDictionary8.allValues[i]  isEqual: @25]) {
//                [NSString stringWithFormat:@""]
//                NSLog(@"%@");
//        }
//        
//

        NSArray *keyArray1 = mDictionary8.allKeys;
        for (NSString *key in keyArray1) {

            NSString *string;
            NSLog(@"%@",mDictionary8[key]);
            //返回一个BOOL值,YES or NO
            if ([mDictionary8[key] isKindOfClass:[NSNumber class]]) {

                int age = [mDictionary8[key] intValue];
                mDictionary8[key] = [NSString stringWithFormat:@"%d",age];
            }
            else{
                string = mDictionary8[key];
            }
            if ([string isEqualToString:@"Rick"]) {
                NSLog(@"key = %@",key);
            }
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值