字典类(十一)

字典类

键值对:key-value

键值对,用一个比喻来说,就是有一堆杂乱的,无序的货物,要怎么样去找到某个货物,并把货物拿出来。那么这里就要用标签去给货物贴上,这样就能在这堆货物里,通过标签,找到自己想要的货物了。

键值对就是类似于这样的存在,我们用一个键key来保存名字,用value来保存实际的值,这样就可以直接通过这个key来取到这个值value。

key相当于货物的标签,value相当于实际的货物。

注意:一堆数据里,key不能重复。

不可变字典NSDictionary:

字典是用来保存具有key-value这样关系的数据的集合的容器。在字典里,key的值在oc里写的时候,可以写重复,但是,在存入对象的时候,相同的key只保存第一个。(严格来说,key的值不能重复)。NSDictionary一旦创建,就不可以修改,不能添加,不能删除,只能通过key来读取value的值。

字典的存放顺序,不是按照个人的意愿进行存放的。而是按照hash算法算出来的值,然后存放的。

字典的创建:initWithObjectsAndKeys

        //2015年04月17日11:16:18 北京

        //字典

        //键值对:(key-value)

        //key(键):相当于贴在货物上得标签

        //value(值):相当于货物

        //通过标签找货物相当于通过key找到value

        //NSDictionary(不可变字典)

        //value可以重复

        //key不能重复(写成重复可以,但是不能存进字典)

        //根据哈希(hash)算出来的值的顺序存放的。

        NSDictionary *dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value_hello world",@"key_A", @"value_this is a place put value",@"key_B",@"value_Biger then Bigger",@"B",@"CCC",@"C",nil];//以nil作为结束标志

        NSLog(@"%@",dict1);/*

                            2015-04-17 11:30:36.976 OCLesson5_字典[1168:55441] {

                            B = "value_Biger then Bigger";

                            C = CCC;

                            "key_A" = "value_hello world";

                            "key_B" = "value_this is a place put value";

                            }

*/

 

        //A:1,B:2,C:3,D:4

        NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"A",@"2",@"B",@"3",@"C",@"4",@"D", nil];

        NSLog(@"%@",dict2);/*

                            2015-04-17 11:35:28.484 OCLesson5_字典[1199:56836] {

                            A = 1;

                            B = 2;

                            C = 3;

                            D = 4;

                            }

                            */

initWithObjectsAndKeys这个方法是其中一个初始化字典的方法,这个方法在初始化的时候,按一对存取,前边是value,后边是key。以nil作为结束标志。

两个数组创建一个字典:dictionaryWithObjects forKeys

这个其实是调用了便利构造器。dictionaryWithObjects这个方法,参数有两个,前边参数是放value得数组,后边的参数是放key的数组。

        //两个数组创建一个字典

        NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

        NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil];

        NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr];

        NSLog(@"%@",dict3);/*

                            2015-04-17 11:42:01.087 OCLesson5_字典[1238:58650] {

                            A = 1;

                            B = 2;

                            C = 3;

                            D = 4;

                            }

                            */

通过key取值:

        //两个数组创建一个字典

        NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

        NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil];

        NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr];

        //通过key取值             (key的value值)

        NSString *s1 = [dict3 objectForKey:@"C"];

        NSLog(@"%@",s1);//2015-04-17 11:44:54.895 OCLesson5_字典[1254:59540] 3

count:计算键值对个数

        //count说的是键值对的个数,不是key有多少个,value有多少个。

        NSUInteger u1 = [dict3 count];

        NSLog(@"%lu",u1);//2015-04-17 11:46:50.807 OCLesson5_字典[1268:60069] 4

获取所有key,获取所有value

        //获取所有的key,返回一个数组,里边是所有的key

        NSArray *keysArr = [dict3 allKeys];

        //获取所有的value,返回一个数组,里边是所有的value

        NSArray *valuesArr = [dict3 allValues];

        NSLog(@"%@",keysArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] (         A,

                              D,

                              B,

                              C

                              )*/

        NSLog(@"%@",valuesArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] (

                                1,

                                4,

                                2,

                                3

                                )

                                */

 

注意:

1、字典与数组一样,不能存标量(基本数据类型数据),只能通过NSNumber来把基本数据类型转换成对象,才能存进字典。

2、字典中得所有key不能重复。

3、字典的key是id类型(任意类型(前提是遵守NSCopying协议)),value也是id类型。

4、遵守NSCopying协议

5、不要考虑存放顺序的问题。

一个练习:

打印所有value的值:(1、allValues 2、allKeys + objectForKey)

        //练习:dict3打印所有的value值(2种方式)

        NSArray *temp1 = [dict3 allValues];

        for (int i = 0; i < [temp1 count]; i++) {

            NSLog(@"%@",temp1[i]);

        }

       

        NSArray *temp2 = [dict3 allKeys];

        for (int i = 0; i < [temp2 count]; i++) {

            NSLog(@"%@",[dict3 objectForKey:temp2[i]]);

        }

可变字典NSMutableDictionary

初始化用init即可

NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc]init];

设置字典:(字典的添加用set,数组用add)

        //设置

        [mdict1 setObject:@"apple" forKey:@"T1"];

        [mdict1 setObject:@"苹果" forKey:@"T2"];

        NSLog(@"%@",mdict1);/*

                             2015-04-17 14:55:50.335 OCLesson5_字典[1615:87301] {

                             T1 = apple;

                             T2 = "\U82f9\U679c";

                             }

                             */

 

 

 

 

 

删除字典:

        [mdict1 removeObjectForKey:@"T1"];

        NSLog(@"%@",mdict1);/*

                             2015-04-17 14:56:44.512 OCLesson5_字典[1625:87641] {

                             T2 = "\U82f9\U679c";

                             }

                             */

修改字典:

        //改

        [mdict1 setObject:@"banana" forKey:@"T2"];

        NSLog(@"%@",mdict1);/*

                             2015-04-17 14:58:59.068 OCLesson5_字典[1639:88252] {

                             T2 = banana;

                             }

                             */

取值:

        //查

        [mdict1 objectForKey:@"T2"];

清空字典:

        //清空字典

        [mdict1 removeAllObjects];

posted @ 2016-01-10 15:57  恒远也  阅读(240)  评论(0编辑  收藏  举报