集合遍历和数组排序
2017-08-25 14:13
260 查看
一、集合遍历
集合:OC中提供的容器类,数组,字典,集合。
遍历:对集合中元素一次取出的过程叫做遍历。
三种方式:
1. for循环遍历
2. NSEnumerator遍历
3. for…in遍历
二、for循环遍历
数组遍历:通过for循环的循环变量用作数组元素下标来获取不同下标的元素。循环次数就是数组元素的个数。
示例:
字典遍历:先获取字典中所有的key,存储到数组中,遍历数组依次取出每一个key,然后根据key从字典中取出对应的value。循环次数等于字典的元素个数。
示例:
集合遍历:用集合的allObjects属性先取到集合的所有元素存储到数组中,再通过for循环的循环变量用作下标来取到每个元素。
示例:
三、NSEnumerator
NSEnumerator:枚举器,遍历集合中的元素。其没有创建对象的接口,要想生成其对象,必须依赖于集合类(数组,字典,集合)。枚举器的nextObject方法,可以取到其依附的集合对象中的每一个对象,如果取完返回nil,枚举器对象经常与while循环一起使用。
注意:在使用枚举器进行遍历时,不可以对正在遍历的可变集合对象进行删除,添加操作。
数组枚举:
字典枚举遍历:
集合枚举遍历:
四、for…in
for…in:快速枚举,是在NSEnumerator的基础上封装的更加方便的快速的遍历集合元素的方式。
格式:
数组的快速枚举:
字典的快速枚举:
集合的快速遍历:
五、数组排序
数组是有序容器,因此集合中只有数组才能排序。
NSSortDescriptor:该类能够方便的实现对数组中的对象进行升序或者降序的排序。它可以把元素的某个属性作为key进行升序或降序的排序,每个NSSortDescriptor对象就是一个排序条件。
示例:
其他数组排序方法:
集合:OC中提供的容器类,数组,字典,集合。
遍历:对集合中元素一次取出的过程叫做遍历。
三种方式:
1. for循环遍历
2. NSEnumerator遍历
3. for…in遍历
二、for循环遍历
数组遍历:通过for循环的循环变量用作数组元素下标来获取不同下标的元素。循环次数就是数组元素的个数。
示例:
NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd", @"eee"]; for (NSUInteger i = 0; i < arr.count; i++) { NSLog(@"%@", arr[i]); }
字典遍历:先获取字典中所有的key,存储到数组中,遍历数组依次取出每一个key,然后根据key从字典中取出对应的value。循环次数等于字典的元素个数。
示例:
NSDictionary *dic = @{@"name":@"盖伦", @"age":@"123", @"gender":@"w"}; NSArray *keysArr = [dic allKeys]; for (NSUInteger i = 0; i < keysArr.count; i++) { NSString *key = keysArr[i]; NSLog(@"%@", dic[key]); }
集合遍历:用集合的allObjects属性先取到集合的所有元素存储到数组中,再通过for循环的循环变量用作下标来取到每个元素。
示例:
NSSet *set = [NSSet setWithObjects:@"element1",@"element2", @"element3", @"element4", nil]; NSArray *objects = set.allObjects; for (NSUInteger i = 0; i < objects.count; i++) { NSString *value = [objects objectAtIndex:i]; NSLog(@"value:%@", value); }
三、NSEnumerator
NSEnumerator:枚举器,遍历集合中的元素。其没有创建对象的接口,要想生成其对象,必须依赖于集合类(数组,字典,集合)。枚举器的nextObject方法,可以取到其依附的集合对象中的每一个对象,如果取完返回nil,枚举器对象经常与while循环一起使用。
注意:在使用枚举器进行遍历时,不可以对正在遍历的可变集合对象进行删除,添加操作。
数组枚举:
//正序枚举 NSArray *arr = @[@"1", @"2", @"3", @"4"]; NSEnumerator *enumerator = [arr objectEnumerator]; id value = nil; while (value = [enumerator nextObject]) { NSLog(@"%@", value); } //反序遍历 NSArray *arr = @[@"1", @"2", @"3", @"4"]; //创建枚举器对象(反序) NSEnumerator *reverse = [arr reverseObjectEnumerator]; id value = nil; while (value = [reverse nextObject]) { NSLog(@"%@", value); }
字典枚举遍历:
//字典是无序的,所有没有反序遍历 //对字典进行枚举器遍历得到的值就是value NSDictionary *dictionary = @{@"key1":@"value1", @"key2":@"value2", @"key3":@"value3", @"key4":@"value4"}; NSEnumerator *enumerator = [dictionary objectEnumerator]; d value = nil; while (value = [enumerator nextObject]) { NSLog(@"%@", value); }
集合枚举遍历:
//字典是无序的,所有没有反序遍历 NSSet *set = [NSSet setWithObjects:@"aa", @"bb", @"cc", @"dd", nil]; NSEnumerator *enumerator = [set objectEnumerator]; id value = nil; while (value = [enumerator nextObject]) { NSLog(@"%@", value); }
四、for…in
for…in:快速枚举,是在NSEnumerator的基础上封装的更加方便的快速的遍历集合元素的方式。
格式:
for (集合中对象的类型 *元素名 in 被遍历的集合) { 语句; }
数组的快速枚举:
NSMutableArray *arr = [@[@"1", @"2", @"3", @"4"] mutableCopy]; for (id value in arr) { if ([value isEqualToString:@"4"]) { [arr removeObject:value]; } NSLog(@"%@", arr); }
字典的快速枚举:
//对字典的快速枚举得到的是字典中的key值! NSDictionary *dic = @{@"name":@"lihua", @"age":@20, @"gender":@"man"}; for (id key in dic) { NSLog(@"%@", dic[key]); }
集合的快速遍历:
//得到的是集合中的每个元素 NSSet *set = [NSSet setWithObjects:@"1", @"2", @"3", @"4",@"5", nil]; for (NSString *str in set) { NSLog(@"%@", str); }
五、数组排序
数组是有序容器,因此集合中只有数组才能排序。
NSSortDescriptor:该类能够方便的实现对数组中的对象进行升序或者降序的排序。它可以把元素的某个属性作为key进行升序或降序的排序,每个NSSortDescriptor对象就是一个排序条件。
示例:
//1.按姓名排序 NSSortDescriptor *sortName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; //2.按年龄排序 NSSortDescriptor *sortAge = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES]; //ascending:排序标志,YES-升序,NO-降序. //数组排序:如果该参数中存储了由name和age两个属性参与创建的NSSortDescriptor对象,在按name进行排序的同时,如果遇到姓名相同的就会按照age进行排序. NSArray *newArr = [arr sortedArrayUsingDescriptors:@[sortName,sortAge]]; NSLog(@"%@", newArr);
其他数组排序方法:
//不可变数组排序方法(排序结果生成新数组,原数组无改变) NSArray *arr = @[@"aaa", @"yyy", @"ccc", @"rrr"]; NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@", newArr); //可变数组排序方法(直接对原数组操作,无新数组生成) NSMutableArray *mArr = [@[@"aaa", @"yyy", @"ccc", @"rrr"]mutableCopy]; [mArr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@", mArr);
相关文章推荐
- day5: 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
- ❀自我唠嗑OC-集合遍历和数组排序
- #Objective - C - sixth-Day 数组排序及集合遍历
- OC学习第五天_字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
- iOSDay16之OC集合遍历和数组排序
- C#数组和集合专题5(Hashtable排序和遍历)
- iOS之OC集合遍历和数组排序
- 6.集合遍历和数组排序
- collections 接口存储一组不唯一,无序的对象。提供了对集合进行排序,遍历等对种算法的实现
- Java比较器对数组,集合排序二
- 数组的排序与遍历
- Java 数组详解 - 用法、遍历、排序、实用API
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- Java集合/数组排序知识与IO流结合实例
- 《黑马程序员》java笔记->【02】数组的常见操作:遍历,排序,查找
- Java集合和数组的排序方式总结
- Java遍历集合、数组的四种方法
- PHP学习(15) 数组的遍历和排序
- Java集合类型遍历和排序
- Java 集合框架(Collection)和数组的排序