OC学习日记09-字典

字典

这里写图片描述

前言

字典其实在理解了数组之上去看的话,是非常容易的。数组是一个一个数出现的,而字典是一对一对“数”出现的,这个“一对数”就是键值对。但是我们要注意,字典是集合,集合是无序的。而其实还有一个类型叫set集合,它也是无序的,因为它是单值无重复的集合。而且他们都有可变和不可变之分,我们把字符串、数组、字典还有set集合一起对比着学,就会容易记住了。

不可变字典 NSDictionary

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",@"G2",@"address",nil];

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

    NSDictionary *dictionary5=[NSDictionary dictionaryWithDictionary:dictionary4];
    NSLog(@"%@",dictionary5);

新语法创建字典

    NSDictionary *dictionary6=@{};
新语法创建只有一个键值对的字典。
    NSDictionary *dictionary7=@{@"name":@"Rick"};
新语法创建只有一个键值对的字典。
    NSDictionary *dictionary8=@{@"name":@"Rick",@"age":@25,@"address":@"G2p"};

从本地读取字典

    NSDictionary *dictionary9=[NSDictionary dictionaryWithContentsOfFile:@""];

从网络读取字典

    NSDictionary *dictionary10=[NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];

字典中键值对的数量

        NSUInteger count=[dictionary4 count];

如何访问字典?

通过key访问字体中对应的值
     NSString *name=[dictionary4 objectForKey:@"name"];
新语法
     NSString *newname= dictionary4[@"name"];

如何访问字典中的key/value

表示字典中所有的key
    NSArray *keysArray=dictionary4.allKeys;
        NSArray *valuesArray=dictionary4.allValues;
        for (int i=0; i<dictionary4.count; i++) {
            NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
        }

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

可变字典 NSMutableDictionary

1.初始化

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

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

从本地读取字典

    NSMutableDictionary *mDictionary6=[NSMutableDictionary dictionaryWithContentsOfFile:@""];

从网络读取字典

      NSMutableDictionary *mDictionary7=[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];

操作字典

      [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 *mDic8=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",
                                    @25,@"age",
                                    @"GZ",@"address",
                                    @"Rick",@"name2",
                                    @"Rick",@"name3",nil];
        NSArray *keysArray=mDic8.allKeys;
        NSArray *valuesArray=mDic8.allValues;
方法一
        for(int i=0;i<mDic8.count;i++){
            if(valuesArray[1] ==valuesArray[i]){
                NSLog(@"%@",keysArray[i]);
            }
            if([valuesArray[i] isKindOfClass:[NSNumber class]]){
                int age=[valuesArray[i] intValue];
                mDic8[@"name"]=[NSString stringWithFormat:@"%d",age];
            }
        }
方法二
     for (NSString *key in keysArray) {
            NSString *string;
            if([mDic8[key] isKindOfClass:[NSNumber class]]){
                int age=[mDic8[key] intValue];
                mDic8[key]=[NSString stringWithFormat:@"%d",age];
            }
            else{
                string =mDic8[key];
            }
            if([string isEqualToString:@"Rick"]){
                NSLog(@"");
            }
        }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值