6.集合遍历和数组排序
2016-02-17 20:13
232 查看
集合遍历的三个方式:
1、for循环遍历
数组遍历:通过for循环的循环变量作为数组元素下标来获取不同下标的元素
循环次数就是数组元素个数
字典遍历:先获取字典中所有的key(allKeys),存储到数组中,遍历数组依次取每一个key,然后根据key从字典中取出对应的value
NSDictionary *dic = @{@"name":@"zhangsan", @"sex":@"m", @"age":@15};
NSArray *arrkey = [dic allKeys];
for (NSInteger i = 0; i < arrkey.count; i ++) {
NSLog(@"%@",dic[arrkey[i]]);
}
根据key直接取value
NSLog(@"name is %@",dic[@"name"]);
集合遍历:先用集合的allObjects属性取到集合中所有元素存储到数组中,在通过for循环的循环变量用作下标来取每个元素
2、枚举器NSEnumerator
枚举器,遍历集合中的元素,依附于集合类(NSArray,NSSet,NSDictionary)
枚举器的方法:nextObject方法只能取出一个对象,结束返回nil,通过与while结合使用可遍历集合中的所有元素。
对可变集合进行枚举操作时,不能通过添加或删除对象这类方式来改变集合容器的元素个数
正序枚举:objectEnumerator
逆序枚举:reverseObjectEnumerator
而字典是无序的,所以没有正序倒序的概念
NSArray *eunmArr = @[@"jinkangda", @"zhubada", @"dazi", @"bada"];
NSEnumerator *rator = [eunmArr objectEnumerator];//正序
NSEnumerator *rator1 = [eunmArr reverseObjectEnumerator];//倒序
id object = nil; // 泛型对象
while (object = [rator nextObject]) {
NSLog(@"%@", object);
}
for…in循环
快速枚举,是在NSEnumerator的基础上封装的更加方便快速的遍历集合元素的方式
格式:
for (集合中对象的类型 *元素名 in 被遍历的集合) {
语句;
}
数组排序
数组是有序容器,因此集合中只有数组才能排序
数组排序的排序条件:NSSortDescriptor对象
初始化排序条件:
NSSortDescriptor *dse = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
key:代表的是按照数组中的哪个属性进行排序,如果数组中存放的是能够直接排序的对象(如:字符串),可直接使用@"self”或者nil;如果存放的是自定义类的对象,可根据需求使用排序的参数如@"name"
ascending:排序的标志,YES-升序,NO-降序
数组根据排序条件进行排序,得到排好序的新数组对象
NSArray *newArr = [arr sortedArrayUsingDescriptors:@[dse]];
sortedArrayUsingDescriptors:数组类型的对象,数组中可以存放多个排序描述对象,最终能够实现按照多个要求进行排序的目的
数组中存放自定义类的对象
创建多个person类,存放到数组中去
其他数组排序方法
不可变数组排序 sortedArrayUsingSelector:
SEL类型参数 只能用 @selector(方法名) 给定。并且,如果数组使用这个方法进行排序,此方法是必须返回值为NSComparisionResult(枚举类型)
可变数组排序 sortUsingSelector:
1、for循环遍历
数组遍历:通过for循环的循环变量作为数组元素下标来获取不同下标的元素
循环次数就是数组元素个数
字典遍历:先获取字典中所有的key(allKeys),存储到数组中,遍历数组依次取每一个key,然后根据key从字典中取出对应的value
NSDictionary *dic = @{@"name":@"zhangsan", @"sex":@"m", @"age":@15};
NSArray *arrkey = [dic allKeys];
for (NSInteger i = 0; i < arrkey.count; i ++) {
NSLog(@"%@",dic[arrkey[i]]);
}
根据key直接取value
NSLog(@"name is %@",dic[@"name"]);
集合遍历:先用集合的allObjects属性取到集合中所有元素存储到数组中,在通过for循环的循环变量用作下标来取每个元素
2、枚举器NSEnumerator
枚举器,遍历集合中的元素,依附于集合类(NSArray,NSSet,NSDictionary)
枚举器的方法:nextObject方法只能取出一个对象,结束返回nil,通过与while结合使用可遍历集合中的所有元素。
对可变集合进行枚举操作时,不能通过添加或删除对象这类方式来改变集合容器的元素个数
正序枚举:objectEnumerator
逆序枚举:reverseObjectEnumerator
而字典是无序的,所以没有正序倒序的概念
NSArray *eunmArr = @[@"jinkangda", @"zhubada", @"dazi", @"bada"];
NSEnumerator *rator = [eunmArr objectEnumerator];//正序
NSEnumerator *rator1 = [eunmArr reverseObjectEnumerator];//倒序
id object = nil; // 泛型对象
while (object = [rator nextObject]) {
NSLog(@"%@", object);
}
for…in循环
快速枚举,是在NSEnumerator的基础上封装的更加方便快速的遍历集合元素的方式
格式:
for (集合中对象的类型 *元素名 in 被遍历的集合) {
语句;
}
数组排序
数组是有序容器,因此集合中只有数组才能排序
数组排序的排序条件:NSSortDescriptor对象
初始化排序条件:
NSSortDescriptor *dse = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
key:代表的是按照数组中的哪个属性进行排序,如果数组中存放的是能够直接排序的对象(如:字符串),可直接使用@"self”或者nil;如果存放的是自定义类的对象,可根据需求使用排序的参数如@"name"
ascending:排序的标志,YES-升序,NO-降序
数组根据排序条件进行排序,得到排好序的新数组对象
NSArray *newArr = [arr sortedArrayUsingDescriptors:@[dse]];
sortedArrayUsingDescriptors:数组类型的对象,数组中可以存放多个排序描述对象,最终能够实现按照多个要求进行排序的目的
数组中存放自定义类的对象
创建多个person类,存放到数组中去
其他数组排序方法
不可变数组排序 sortedArrayUsingSelector:
SEL类型参数 只能用 @selector(方法名) 给定。并且,如果数组使用这个方法进行排序,此方法是必须返回值为NSComparisionResult(枚举类型)
可变数组排序 sortUsingSelector:
相关文章推荐
- "信仰充值" 那颗樱桃的甜酸味:Cherry 樱桃 G80-3000 白茶/白青(伪)开箱
- POJ 2785 (二分)
- (4) linux shell 命令 -- mkdir
- ubuntu15.0 编译SRS2.0
- Linux 解压压缩命令
- 有int d; int *d; bool d; double d;判断这个四个变量是否等于0?
- PHP的CI框架集成Smarty的最佳方式
- 【tyvj1860】后缀数组
- 南阳题目11-奇偶数分离
- 使用Echarts过程中遇到的问题
- EventBus使用详解(二)——EventBus使用进阶
- Dijkstra和Prim算法 【含数学证明】
- [置顶] Linux线程退出方式总结
- 集合
- OAuth2.0 Authorization flows and grant types
- thinkphp集成支付宝支付接口遇到的错误
- 2016上半年科研日志
- 使用SDWebImage下载图片,sharedDownloader方法下载成功,new 方法下载失败
- [ linux ] pad远程
- LoadRunner使用记录