您的位置:首页 > 其它

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:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: