美文网首页
NSDictionary和NSSet - 学习笔记

NSDictionary和NSSet - 学习笔记

作者: degulade | 来源:发表于2016-03-23 09:23 被阅读478次

    一个网管的iOS学习笔记,记录下自己这条路上的点点滴滴。都是一些很简单的笔记,不敢妄谈教学,纯粹只是为了记录自己在这条路上——前进着。

    参考原文:OC 字典和集合的常用用法

    • 在OC中快速生成对象的几个方法(即语法糖):

    (1)@+数字,即快速将基本的数据类型转换为NSNumber类型的对象,如:@10(@后面直接加上一个数字),如果是一个变量,即 int a = 10,则为:@(a)

    (2)数组对象 = @+[](括号中的内容即是对象),快速创建数组对象,例如:NSArry *arr = @[@"name",@"sex",@22];这样创建的数组是不可改变的数组

    (3)数组名+[下标]快速获取数组下标对应的元素,如:arr[2]就是获取数组arr中的第3个元素22》

    一、字典

    字典:也是一个大容器,用来存储多个数据,而且存储的数据具有一一对应关系,使用key来标识value值,字典里的key是唯一的,一个key只能对应一个value,但是一个value可以对应多个key。对于字典的的一对键值对(即key-value)叫做字典的一个元素,也叫做一个条目,她存储的内容不限制对象类型,但是只能用来存储对象,同时字典是无序的。

    (一)不可变字典:NSDictionary

    例如:

       NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Qinqin",@"name",@"178",@"height",@"22",@"age",nil];
       NSLog(@"%@",dic);
    

    输出结果:

    2016-03-23 05:11:13.216 Study-OC[17455:5258686] {
       age = 22;
       height = 178;
       name = Qinqin;
    }
    

    1、创建字典对象:

    1)便利构造器:dictionaryWithObjectsAndKeys:

       NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Qinqin",@"name",@"178",@"height",@"22",@"age",nil];
       NSLog(@"%@",dic);
    

    2)初始化方法:initWithObjectsAndKeys:

        NSDictionary *dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"Qinqin",@"name",@"178",@"height",@"22",@"age", nil];
        NSLog(@"%@",dic1);
    

    2、求字典元素个数:count,count这个属性在数组、字典、集合里都有,并且都是用来计算相应容器(数组、元素、字典、集合等)的元素个数:

        NSUInteger count = [dic count];
        NSLog(@"%lu",count);
    

    输出结果:

    2016-03-23 05:30:43.812 Study-OC[17463:5261749] 3
    

    3、获取所有的key:allKeys

        NSArray *keys = [dic allKeys];
        NSLog(@"%@",keys);
    

    输出结果:

    2016-03-23 05:30:43.813 Study-OC[17463:5261749] (
        name,
        age,
        height
    )
    

    4、根据key获取对应的value:ObjectForKey:,返回值为字符串对象(这里ObjectForKey后面没有加s,说明只是取出其中的一个元素,而不是全部,即提现了OC里面方法名的见名知意,我们在学习过程中可以根据方法名大概猜出方法的实现内容):

        NSString *name = [dic objectForKey:@"name"];
        NSLog(@"%@",name);
        NSNumber *height = [dic objectForKey:@"height"];
        NSLog(@"%@",height);
        NSNumber *age = [dic objectForKey:@"age"];
        NSLog(@"%@",age);
    

    输出结果:

    2016-03-23 05:44:06.756 Study-OC[17474:5264242] Qinqin
    2016-03-23 05:44:06.756 Study-OC[17474:5264242] 178
    2016-03-23 05:44:06.756 Study-OC[17474:5264242] 22
    

    下面一个例子是把字典里的key的对应值取出来存在一个数组里:allValues,返回值是数组对象:

        NSArray *values = [dic allValues];
        NSLog(@"%@",values);
    

    输出结果:

    2016-03-23 05:50:37.330 Study-OC[17478:5265354] (
        Qinqin,
        22,
        178
    )
    

    5、字典快速遍历:for...in在遍历数组时,遍历的是数组中的每个元素,在对字典快速遍历时,遍历的是字典中的key,然后通过key获取对应的value值,因此forin里type对应的类型是key对应的对象类型:

        for (NSString *dic2 in dic) {
            //检索到key时,通过ObjectForKey:获取对应的value值
            NSLog(@"%@",[dic objectForKey:dic2]);
        }
    
    

    输出结果:

    2016-03-23 05:57:44.473 Study-OC[17482:5266490] Qinqin
    2016-03-23 05:57:44.473 Study-OC[17482:5266490] 22
    2016-03-23 05:57:44.473 Study-OC[17482:5266490] 178
    
    (二)可变字典:NSMutableDictionary

    1、创建可变字典对象:

    便利构造器:dictionaryWithObjectsAndKeys:

        NSMutableDictionary *mudic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Lisi",@"name1",@"zhangsan",@"name2",@22,@"age1",@18,@"age2", nil];
        NSLog(@"%@",mudic);
    

    2、求字典元素个数:count

        NSLog(@"%lu",[mudic count]);
    
    

    3、删除元素:removeObjectForKey:给定一个key值删除对应的value值;removeAllObjects删除所有条目:

        [mudic removeObjectForKey:@"age1"];
        NSLog(@"%@",mudic);
        [mudic removeAllObjects];
        NSLog(@"%@",mudic);
    

    输出结果:

    2016-03-23 06:21:22.969 Study-OC[17500:5270901] {
        age2 = 18;
        name1 = Lisi;
        name2 = zhangsan;
    }
    2016-03-23 06:21:22.969 Study-OC[17500:5270901] {
    }
    

    4、添加元素:setObject:forKey:

        [mudic setObject:@"Wangwu" forKey:@"name3"];
        NSLog(@"%@",mudic);
    

    输出结果:

    2016-03-23 06:25:12.529 Study-OC[17504:5271680] {
        name3 = Wangwu;
    }
    

    5、修改key对应的value:setObject:forKey:跟添加元素是同一个方法,在这里setObject:forKey:根据指定的key查找是否有对应的value,如果没有就添加进去(即添加元素),若存在该key对应的value则将其修改为指定的value值(即修改对应的value):

        [mudic setObject:@"Zhaoliu" forKey:@"name3"];
        NSLog(@"%@",mudic);
    

    输出结果:

    2016-03-23 06:31:14.041 Study-OC[17508:5272692] {
        name3 = Zhaoliu;
    }
    
    (三)不可变集合:NSSet

    集合也是一个大容器,具有确定性,唯一性,无序性。里面可以存储任何类型的对象。

    1、创建一个集合对象:

    1)便利构造器:setWithObjects:

        NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"age1",@14,@"age2", nil];
        NSLog(@"%@",set);
    

    输出结果:

    2016-03-23 06:48:05.386 Study-OC[17520:5275707] {(
        3,
        age2,
        14,
        4,
        1,
        2,
        age1
    )}
    

    2)初始化方法:initWithObjects:

        NSSet *set1 = [[NSSet alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];
        NSLog(@"%@",set1);
    

    输出结果:

    2016-03-23 06:48:05.386 Study-OC[17520:5275707] {(
        3,
        1,
        4,
        2
    )}
    

    2、获取集合中的牧鸥哥元素:anyObject,第一次取出一个元素后,再多次取出,每次都和第一次取出的一样:

        NSString *Str1 = [set1 anyObject];
        NSLog(@"%@",Str1);
        NSString *Str2 = [set1 anyObject];
        NSLog(@"%@",Str2);
        NSString *Str3 = [set1 anyObject];
        NSLog(@"%@",Str3);
        NSString *Str4 = [set1 anyObject];
        NSLog(@"%@",Str4);
        NSString *Str5 = [set1 anyObject];
        NSLog(@"%@",Str5);
    

    输出结果:

    2016-03-23 06:51:49.732 Study-OC[17533:5277202] 3
    2016-03-23 06:51:49.732 Study-OC[17533:5277202] 3
    2016-03-23 06:51:49.732 Study-OC[17533:5277202] 3
    2016-03-23 06:51:49.732 Study-OC[17533:5277202] 3
    2016-03-23 06:51:49.732 Study-OC[17533:5277202] 3
    

    3、获取元素个数:count

        NSLog(@"%lu",[set1 count]);
    

    4、判断集合中是否包含某个对象:containsObject:,返回1(即有),返回0(即没有):

        NSLog(@"%d",[set1 containsObject:@"4"]);
        NSLog(@"%d",[set1 containsObject:@"age1"]);
    

    输出结果:

    2016-03-23 06:58:50.572 Study-OC[17558:5280141] 1
    2016-03-23 06:58:50.572 Study-OC[17558:5280141] 0
    
    可变集合:NSMutableSet

    1、创建一个可变集合对象:setWithObjects:

        NSMutableSet *muset = [NSMutableSet setWithObjects:@"1",@"2"@"3",@"4",@"Lisi",@"name",nil];
    

    输出结果:

    2016-03-23 07:05:42.377 Study-OC[17568:5281741] {(
        1,
        4,
        Lisi,
        23,
        name
    )}
    

    2、添加元素:addObject:

        [muset addObject:@"age"];
        NSLog(@"%@",muset);
    

    输出结果:

    2016-03-23 07:05:42.377 Study-OC[17568:5281741] {(
        age,
        1,
        4,
        Lisi,
        23,
        name
    )}
    

    3、删除元素:removeObject:,移除全部元素:removeAllObjects:

        [muset removeObject:@"name"];
        NSLog(@"%@",muset);
        [muset removeAllObjects];
        NSLog(@"%@",muset);
    

    输出结果:

    2016-03-23 07:08:22.406 Study-OC[17575:5282742] {(
        age,
        1,
        4,
        Lisi,
        23
    )}
    2016-03-23 07:08:22.406 Study-OC[17575:5282742] {(
    )}
    

    因为半路出家的原因吧,对于一些基础的概念还是比较模糊,所以还是有必要加深基础知识的学习。

    相关文章

      网友评论

          本文标题:NSDictionary和NSSet - 学习笔记

          本文链接:https://www.haomeiwen.com/subject/ukmllttx.html