NSDictionary和NSSet - 学习笔记

一个网管的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 - 学习笔记)