集合遍历的三个方式:
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:
相关文章
- JDk---集合转数组的toArray和toArray(T[] a)方法
- Python 随机列表、集合、元组、字典的生成和排序
- 数组和集合的区别
- java中List集合的遍历和两种实现类的比较分析
- java集合 TreeMap 使用自然排序和定制排序
- TreeMap排序和Map的遍历
- 排序算法-插入排序-初始状态: 将数组分为已排序部分和未排序部分。初始时,已排序部分只包含第一个元素,而未排序部分包含其余的元素。逐步构建有序序列: 从未排序部分取出第一个元素,将其插入到已排序部分的正确位置,使得已排序部分仍然保持有序。比较并移动: 将取出的元素与已排序部分的元素逐一比较,找到其正确的插入位置。为了插入,可能需要将比它大的元素依次向右移动,为新元素腾出插入的位置。重复步骤 2-3: 重复以上步骤,每次取出未排序部分的一个元素,插入到已排序部分的正确位置。这样,已排序部分逐渐增加,未排序部分逐渐减小。直到排序完成: 重复上述过程,直到未排序部分为空,整个数组就被排序完成了。 插入排序代码
- 不使用数组,和其他排序解决下面问题:.某比赛有10个评委打分,编写程序,输入评委所给分数,然后求选手的平均分要求去掉一个最高分和一个最低分再求平均。
- java数组遍历——iterator和for方法
- mybatis使用foreach遍历list集合或者array数组