04-Foundation-NSSet、NSDictionary、block
目录:
一、NSSet集合
1 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的。
2 什么叫重复?
* 同一个对象
* 两个对象信息值一样
计算机认为的一样是:同一个对象
3 对象的哈希值(hash)
* set中确定对象是否是重复的?例如A对象和B对象,先调用A对象的hash方法得到一个整数,在调用B对象的hash方法得到一个整数,如果整数不相同,计算机就认为两个对象是不同的对象(没有重复)
* 因为计算机认为同一个对象才是重复的,而不同对象相同值是不能判断的,所有我们要重写hash方法来判断里面的值是否相同,如果hash值相同此时会再次调用对象的isEqual方法,再次判断两个对象是否相同。
1 -(BOOL)isEqual:(id)object{
2
3 NSLog(@"isEqual执行了");
4
5 //判断类型
6
7 //判断对象是否是同一对象
8
9 if (self == object) {
10
11 return YES;
12
13 }else if([object isMemberOfClass:[Student class]]){
14
15 //判断对象中每一个属性的值
16
17 Student* stu2 = object;
18
19 if ([self.name isEqualToString:stu2.name]){
20
21 return YES;
22
23 }else{
24
25 return NO;
26
27 }
28
29 }else{
30
31 return NO;
32
33 }
34
35 }
练习:创建Point类,有两个属性x,y,创建三个对象放到NSSet集合中,point1(3,5)point2(3,6)point3(3,5)遍历NSSet集合,使用快速枚举、迭代器。
练习:学生->班级->学院->学校
8 4 2 1
* 查看所有学生信息
* 显示 姓名zhangsan
* 显示 年龄18
(NSArray NSMutableArray)
二、NSDictionary字典
NSMutableDictionary可变字典
1 是由键-值对组合的集合
2 通过key,找到相应的value,通常来讲,key的值是字符串类型,value的值是任意对象类型。
3 key的值不允许重复,value的值是可以重复
4 通常来讲,key的值与value的值不允许为空
5 可以保存多条数据
1 // 初始化
2 NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
3 NSLog(@"%@",dic);
4
5 NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
6 //添加键值对
7 [dic2 setValue:@"v4" forKey:@"k4"];
8 NSLog(@"%@",dic2);
9 //通过健查找值
10 NSString* value = [dic2 objectForKey:@"k1"];
11 NSLog(@"key:%@->value:%@",@"k1",value);
12 //遍历
13 //得到所有的key
14 NSArray* keys = [dic2 allKeys];
15 //通过对key排序来搞定对字典的排序
16 NSArray* newKeys = [keys sortedArrayUsingSelector:@selector(compare:)];
17 for (NSString* k in newKeys) {
18 NSLog(@"%@->%@",k,[dic2 objectForKey:k]);
19 }
三、block代码块
1 block封装一段代码,可以在任何时候执行,block可以做为函数参数或函数的返回值,而本身又可以带输入参数或返回值,它和传统的函数指针相类似
函数和block区别:
1 block是OC中的语法
2 block的定义可以写在函数中
3 使用起来更直观,耦合度更低
4 直接用不用声明
1 //比较器
2 NSArray* array2 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
3 NSString* s1 = obj1;
4 NSString* s2 = obj2;
5 return [s1 compare:s2];
6 }];
7 NSLog(@"%@",array2);