NSDictionary和NSSet - 学习笔记
一个网管的iOS学习笔记,记录下自己这条路上的点点滴滴。都是一些很简单的笔记,不敢妄谈教学,纯粹只是为了记录自己在这条路上——前进着。
- 在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] {(
)}
因为半路出家的原因吧,对于一些基础的概念还是比较模糊,所以还是有必要加深基础知识的学习。