• 字典类(十一)


    字典类

    键值对: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 = "U82f9U679c";

                                 }

                                 */

    删除字典:

            [mdict1 removeObjectForKey:@"T1"];

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

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

                                 T2 = "U82f9U679c";

                                 }

                                 */

    修改字典:

            //改

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

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

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

                                 T2 = banana;

                                 }

                                 */

    取值:

            //查

            [mdict1 objectForKey:@"T2"];

    清空字典:

            //清空字典

            [mdict1 removeAllObjects];

  • 相关阅读:
    FreeSWITCH一些需求应对
    CentOS 7安装Mysql并设置开机自启动
    RTP学习笔记
    SDP学习笔记
    Quartz实用二三事
    Quartz:ERROR threw an unhandled Exception
    CentOS 7一些常用配置
    Java获取音频文件(MP3)的播放时长
    使用Callable和Future接口创建线程
    join() 方法详解及应用场景
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118598.html
Copyright © 2020-2023  润新知