OC_08字典

这次咱们来讲讲OC中的字典。
字典 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:@"Jack" forKey:@"name"];

      //创建一个只有多个键值对的字典
        NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"Jason",@"name",@22,@"age",@"CZ",@"address", nil];

//        NSLog(@"%@",dictionary4[@"name"]);
        //字典里面存放的元素都要是对象类型才行。如果基本数据类型,要先把基本数据类型进行封装,然后再放到这些集合中去。
        NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
        NSLog(@"%@",dictionary5);

        //新语法创建字典
        NSDictionary *dictionary6 = @{};
        //新语法创建只有一个键值对的字典
        NSDictionary *dictionary7 = @{@"name":@"Bob"};
        //新语法创建有多个键值对的字典
        NSDictionary *dictionary8 = @{@"name":@"Bob",@"age":@25,@"address":@"CZ"};
        //从本地读取字典
        NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@"files"];
        //从网络读取字典
        NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];

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

        //如何访问字典
        //通过key访问字典中对应的值
        NSString *name  = [dictionary4 objectForKey:@"name"];
        NSLog(@"%@",name);
        //新语法
        NSString *newname = dictionary4[@"name"];
        NSLog(@"姓名:%@",newname);
        NSLog(@"姓名:%@",dictionary4[@"name"]);

        //如何遍历字典中所有的key和value
        //表示字典中所有的key

        NSArray *keysArray = dictionary4.allKeys;
        NSLog(@"%@",keysArray);


        NSArray *valuesArray = dictionary4.allValues;
        NSLog(@"%@",valuesArray);

//  使用for循环来打印 key = value   [必须记住!!!]
        for (int i=0; i<dictionary4.count; i++) { //dictionary.count 键值对数量
            NSLog(@"%@ = %@",dictionary4.allKeys[i],dictionary4.allValues[i]);
        // 关键字 = 值  第i个关键字=第i个值 dictionary4.allKeys[i]=dictionary.allValue[i]
        }

        //for in
        for (NSString *key in keysArray) {
            NSLog(@"%@ = %@",key,dictionary4[key]);
        }

        //使用枚举器遍历
        NSEnumerator *enumerator = [keysArray objectEnumerator];
        id key;
        while (key = [enumerator nextObject]) {
  NSLog(@"%@ = %@",key,dictionary4[key]);
        }
  NSLog(@"---------------------------");
  NSDictionary *dictionary = @{@"name":@"Jason",@"age":@22,@"address":@"CZ",@"name":@"Barry"};
 for (NSString *str in dictionary.allKeys){
    NSLog(@"%@ = %@",str,dictionary[str]);
 }

//注意:在字典中键值对是无序的

    //使用NSDicgtionary注意事项
    /*
     1.创建字典时,字典的键和数值都要是id(即对象)类型的;
     2.创建字典时,传进的参数都是键值对,即键和对象要成对出现,最后不要忘了加一个nil;
     3.在使用字典时,不要把字典当成可变字典使用;
     4.字典的关键字(键)不要重复,如果重复了,后面的值就会覆盖前面的值。 
     ---[mDictionary5 setValue:@"Jason" forKey:@"name"];
     ---[mDictionary5 setValue:@"Jack" forKey:@"name"];
     */

#pragma —可变字典—
//可变字典 NSMutableDictionary

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

        //创建一个有一个键值对的可变字典
        NSMutableDictionary *mDictionary2 = [NSMutableDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
        //创建一个有多个键值对的可变字典
        NSMutableDictionary *mDictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Jason",@"name",@22,@"age",@"CZ",@"address", nil];

        //通过另一个字典创建一个字典
        NSMutableDictionary *mDictionary4 = [NSMutableDictionary dictionaryWithDictionary:mDictionary3];

//        mDictionary4.allKeys;
//        mDictionary4.allValues;
        for (NSString *str in mDictionary3.allKeys) {
            NSLog(@"%@ = %@",str,mDictionary3);
        }
        //可变字典独有的初始化方法
        NSMutableDictionary *mDictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];

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

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

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

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

        NSMutableDictionary *mDic8 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Jack",@"name1",@22,@"age",@"CZ",@"address",@"Jack",@"name2",@"Jack",@"name3", nil];

       NSArray *keysArray1 =  mDic8.allKeys;
        for (NSString *key in keysArray1) {
            NSString *string;

//            NSLog(@"%@",mDic8[key]);
            [mDic8[key]isKindOfClass:[NSNumber class]]; //判断mDic8[key]中的值是否为NSNumber类型
        if ([mDic8[key] isKindOfClass:[NSNumber class]]) {
        int age = [mDic8 [key] intValue];
        mDic8[key] = [NSString stringWithFormat:@"%d",age];
                NSLog(@"%d",age);

        }else{
                string = mDic8[key];
            }
     if ([string isEqualToString:@"Jack"]) {
//        NSLog(@"key = %@",key);
            }
      NSLog(@"key = %@",key);

字典还是比较常用的一个函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值