OC学习日记09-字典

来源:互联网 发布:美国反恐战争数据图 编辑:程序博客网 时间:2024/06/07 04:46

字典

这里写图片描述

前言

字典其实在理解了数组之上去看的话,是非常容易的。数组是一个一个数出现的,而字典是一对一对“数”出现的,这个“一对数”就是键值对。但是我们要注意,字典是集合,集合是无序的。而其实还有一个类型叫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(@"");            }        }

这里写图片描述

0 0
原创粉丝点击