iOS学习16之OC集合遍历和数组排序

Posted by

插入排序,是循环遍历一个无序数组(例如有10个元素),把遍历出来的数值(第i个元素)插入到已经排过顺序的数组(这个有序数组有10-i个元素)中。

1、集合遍历

用一个 数组 举个例子:

 1> 遍历

  集合(Collection):OC中提供的容器类:数组,字典,集合。

  遍历:对集合中元素依次取出的过称叫做遍历。

  三种方式:① for循环遍历; ② NSEnumerator遍历; ③ for…in遍历

初始数组:1, 89, 4, 34, 56, 40, 59,
60, 39, 1, 40, 90, 48 

 2> for循环遍历

第一次循环(i=0):1, 89, 4, 34, 56, 40, 59, 60, 39, 1, 40, 90,
48 

  ① 数组遍历

   原理:通过for循环的循环变量用作数组元素下标来获取不同下标的元素。

   循环次数就是数组元素的个数。

1 // 数组
2 for (int i = 0; i < arr.count; i++) {
3     NSLog(@"%@", arr[i]);
4 }

第二次循环(i=1):  1, 89, 4, 34, 56, 40, 59, 60, 39, 1, 40, 90,
48 

  ② 字典遍历

   原理:先获取字典中所有的key,存储到数组中,遍历数组依次取出每一个key,然后根据key从字典中取出对应的value

   循环次数就是字典元素的个数。

1         // 字典
2         // 获取字典中所有的key值
3         NSArray *allKey = [dict allKeys];
4         // 遍历key值数组,访问对应的object值
5         for (int i = 0; i < allKey.count; i++) {
6             NSString *key = allKey[i];
7             NSLog(@"%@", [dict objectForKey:key]);
8         }

第三次循环(i=2):  1, 4, 89,
34, 56, 40, 59, 60, 39, 1, 40, 90, 48 

  ③ 集合遍历

   原理:用集合的allObjects属性先取到集合的所有元素存储到数组中,再通过for循环的循环变量用作下标来取到每个元素。

1         // 集合
2         // 取出集合中的所有元素放到数组中
3         NSArray *setArray = [set allObjects];
4         for (int i = 0; i < setArray.count; i++) {
5             NSLog(@"%@", setArray[i]);
6         }

第四次循环(i=3):1, 4, 34,
89, 56, 40, 59, 60, 39, 1, 40, 90,
48 

 3> NSEnumerator

… …

  ① 概述 

   枚举器,遍历集合中的元素。

   依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口。

   NSEnumerator的 nextObject
方法可以遍历每个集合元素,结束返回 nil ,通过与 while
结合使用可遍历集合中所有元素。

   对可变集合(数组,字典,集合)进行枚举操作时,不能通过添加或删除对象这类方式来改变集合容器的元素个数。

第13次循环(i=12)(结束):1, 1,
4, 34, 39,
40, 40, 48,
56, 59, 60,
89, 90

  ② 数组遍历

   正序(objectEnumerator)

1         // 数组(正序)
2         // 创建正序的枚举器对象
3         NSEnumerator *arrayEnum1 = [arr objectEnumerator];
4         id value1 = nil;
5         // 判断value部位空打印数据
6         while ((value1 = [arrayEnum1 nextObject])) {
7             NSLog(@"%@", value1);
8         }    

   倒序(reverseObjectEnumerator)

1         // 数组(倒序)
2         // 创建倒序的枚举器对象
3         NSEnumerator *arrayEnum2 = [arr reverseObjectEnumerator];
4         id value2 = nil;
5         while ((value2 = [arrayEnum2 nextObject])) {
6             NSLog(@"%@", value2);
7         }

  注:枚举器的nextObject方法只能取出一个对象,所以需要和while循环结合把所有元素依次取出。

  ③ 字典遍历

1         // 字典
2         // 遍历到的是字典中的value值
3         NSEnumerator *dictEnum = [dict objectEnumerator];
4         id value3 = nil;
5         while ((value3 = [dictEnum nextObject])) {
6             NSLog(@"%@", value3);
7         }

  注:字典中存放的数据是无序的,没有反向枚举的概念。

  ④ 集合遍历

1         // 集合
2         NSEnumerator *setEnum = [set objectEnumerator];
3         id value4 = nil;
4         while ((value4 = [setEnum nextObject])) {
5             NSLog(@"%@", value4);
6         }

  注:集合中存放的数据是无序的,没有反向枚举的概念。

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注