集合类(数组,字典,集合)的枚举
枚举器: ENumerator : 一个工具类,功能是一一列举容器类中存储的元素,枚举器不需要自己去创建对象,直接获取容器类对象创建的相应的枚举器
比如:NSArray *array = @[ob1,ob2,ob3]; Enumerator *enum = [array objectEnumerator] 即获取了不可变数组array的枚举器
然后与while循环联合使用便可枚举集合的所有元素: id object = nil; while(object = [enum nextObject]){ NSLog{@"object = %@"}, object }; 将array中的元素一一打印出来
获取数组的反向枚举器 enum = [array reverseObjectEnumerator];
快速枚举 for in :本质是对枚举器进行了封装
格式: for(元素对象的类型 元素对象 in 被枚举集合) { 操作... };
举例: for (id object in array) { NSLog:(@"%@",object); }; 将array中的各个对象元素一一打印出来
字典容器获取枚举器的方法: NSDictionary *dict = @{ob1,ob2,ob3}; enum = [dict keyEnumerator ;] 即:是要获得字典中所有key值的枚举器,再通过对key值的枚举从而可以对 每个 key值对应的value进行枚举 .
数组集合的排序
1.方法排序:(如使用冒泡排序)通过定义数组中对象的属性比较方法:compareProperty()和数组的交换元素方法:exchangeObjectAtIndex:m withObjectAtIndex:n 来实现数组的排序
方法选择器@selector的使用可以简化代码 属性值的比较方法定义格式: -(NSComparisonResult)compareProperty:(id)other {.....}
举例: newArray = [array sortedArrayUsingSelector:@selector(compareProperty)];
2.排序描述类排序:
排序描述类对象的创建: NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:ob ascending:BOOL];
key表示排序主键,即对象的属性名称 ascending:YES 表示升序排序,反之NO表示降序
举例:对array数组中的thisProperty属性进行排序:
NSSortDescriptor *arrayDesc = [[NSSortDescriptor alloc] initWithKey:thisProperty ascending:YES]; newArray = [array sortedArrayUsingDescriptors:@[arraytDesc]];
如果sortUsingDescriptors方法的参数中有多个排序描述对象时,首先按第一个描述排序,遇到相同属性则按第二个进行排序,依次类推
如:[array sortedArrayUsingDescriptors@[arrayDesc1,arrayDesc2...];
排序描述类排序的好处:可以同时按多种方式排序,而且不用手动写比较属性方法的实现
3.block方法排序: 举例: array sortedArrayUsingComparator:^NSComparisonResult(id ob1, id ob2){......}