集合的遍历
1.for循环遍历
2.枚举器遍历
1 NSArray *enumArray = @[@"CM", @"PL", @"Lina", @"NEC"]; 2 //创建一个枚举器,依附于数组 3 NSEnumerator *rator = [enumArray objectEnumerator]; 4 //创建一个对象 5 id object = nil; 6 while (object = [rator nextObject]) 7 { 8 NSLog(@"%@", object); 9 }
也可以反向枚举
1 //反向枚举 2 NSEnumerator *reverseRator = [enumArray reverseObjectEnumerator]; 3 while (object = [reverseRator nextObject]) 4 { 5 NSLog(@"%@", object); 6 }
利用枚举器遍历字典
1 rator = [dict objectEnumerator]; 2 while (object = [rator nextObject]) 3 { 4 NSLog(@"%@", object); 5 }
3.forin循环
forin其实是基于枚举器遍历进行的一次封装,结构为:
for ( type *object in collection)
{
statements
}
其中collection是需要遍历的容器,object指代collection每一次遍历的元素,如果collection里的对象都是同一类型,那么object的类型可以指定,statements为循环体。比如:
1 for (NSString *str in array) 2 { 3 NSLog("%@", str); 4 }
集合的排序
1.NSSortDescriptor
1 /** 2 * 使用NSSortDescriptor进行数组排序有三步 3 * 1.创建一个用来排序的数组 4 * 2.创建一个排序条件,初始化中需要指定按照数组中对象的什么属性值排序,升序或者降序 5 * 3.数组根据排序条件进行排序,得到一个排序之后的数组(如果是可变数组,不会生成新数组,还是本身) 6 */
1 NSArray *array = @[@"PA", @"AM", @"Luna", @"DR", @"MED"]; 2 NSSortDescriptor *des = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 3 NSLog(@"%@", [array sortedArrayUsingDescriptors:@[des]]);
首先初始化一个NSSortDescriptor对象,初始化方法initWithKey:有两个参数。第一个代表根据什么排序,在这里使用array自身,即对array内的元素进行排序,如果array里的每个元素都是一个对象,而这个对象有某个属性,这时就可以将属性名作为参数,即可根据属性名进行排序;第二个参数表示升序或者降序。
2.sortedArrayUsingSelector:@selector()
1 NSArray *newArray = [array sortedArrayUsingSelector:@selector(compare:)]; 2 NSLog(@"%@", newArray);
在@selector里填写方法名,类似C语言里的函数指针,并且方法需要是如下结构
- (NSComparisionResult) 方法名:参数
这个方法是指定根据什么规则进行排序。比如这里传入的是系统方法compare:。compare方法的返回值就是NSComparisionResult类型的,而这种方式默认是升序排列,如果想进行降序排序的话,可以这样去定义一个方法:
1 - (NSComparisonResult)compareDescending:(NSString *)str 2 { 3 NSComparisonResult result = [self compare:str]; 4 if (result < 0) 5 { 6 return 1; 7 } 8 else if (result > 0) 9 { 10 return -1; 11 } 12 else 13 { 14 return 0; 15 } 16 }
并把该方法名compareDescending:作为@selector的参数即可完成降序排序。