一、集合遍历
     1、集合:OC中提供的容器类,数组,字典,集合。
     2、遍历:对集合中元素依次取出的过程叫做遍历。
二、for循环遍历
     1、通过for循环的循环变量用作数组元素下标来获取不同下标的元素,循环次数就是数组元素的个数。
     2、

      // for 循环遍历数组
        ; i < array.count; i++) {
        // 根据数组下标访问数组元素
           NSString *str = [array objectAtIndex:i];
            NSString *str1 = array[i];
       // 两种访问方式
            NSLog(@"%@", str1);
        }

        // for循环遍历字典
        // 获取字典中所有的key值
        NSArray *arr = [dict allKeys];
        // 遍历keys数组,访问对应的object值
        ; i < arr.count; i++) {
            // 通过下标获取每个key值
            id obj = [dict objectForKey:arr[i]];
            id obj = dict[arr[i]];
        // 两种获取方式
            NSLog(@"%@", obj);
        }
        // for循环遍历集合
        // 取出集合中的元素存放在数组中
        NSArray *setArray = [set allObjects];
        ; i < setArray.count; i++) {
        // 两种存放方式
            NSLog(@"%@", setArray[i]);
            NSLog(@"%@", [setArray objectAtIndex:i]);
        }
//            定义一个数组, 包含5个字符串对象, 倒序取出数组中所有元素, 并存储到另一可变数组中。
        NSArray *array3 = [NSArray arrayWithObjects:@"zhangsan", @"lisi", @"wangwu", @"asd", @"wqe", nil];
        NSMutableArray *marray = [NSMutableArray array];
        NSLog(@"%@", array3);
        ; i >= ; i--) {
//            [marray addObject:array3[i]];
            marray = [array3 objectAtIndex:i];
            NSLog(@"%@", marray);
        }
三、NSEnumerator
     1、枚举器,遍历集合中的元素,依附于集合类,没有用来创建实例的接口,NSEnumerato的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有元素。对可变集合进行枚举操作时,不能通过添加或删除对象这类方式来改变集合容器的元素个数。
for循环可以修改集合的内容。
2、

     // 遍历数组(正序)
        // 正序的枚举器对象
        NSArray *array1 = @[@"aCat", @"aDog", @"aFu", @"aMeng"];
        NSEnumerator *arrayEnum = [array1 objectEnumerator];
        id value = nil; // 存储数组中的元素对象
        // 循环次数未知,所以判断value不为空就打印数据,如果value为空循环停止
        while ((value = [arrayEnum nextObject])) {
            NSLog(@"%@", value);
        }
        // 遍历数组(反序)
        // 倒序的枚举器对象
        NSEnumerator *arrayEnum1 = [array1 reverseObjectEnumerator];
        id value1 = nil;// 存储数组中的元素对象
        while ((value1 = [arrayEnum1 nextObject])) {
            NSLog(@"%@", value1);
        }

        // 遍历字典
        // 遍历到的是字典中的object值
        // 字典中存放的数据是无序的,没有反向枚举

        NSEnumerator *dictionaryEnum = [dict1 objectEnumerator];
        id value2 = nil;
        while ((value2 = [dictionaryEnum nextObject])) {
            NSLog(@"%@", value2);
        }
        // 遍历集合
        // 遍历到集合的每一个元素
        // 集合中村粗的数据是无序的,没有反向枚举的概念
        NSEnumerator *setEnum = [set1 objectEnumerator];
        id value3 = nil;
        while ((value3 = [setEnum nextObject])) {
            NSLog(@"%@", value3);
        }
四、for...in
     1、快速枚举,是在NSEnumerator的基础上封装的更加方便的快速的遍历几何元素的方式
     2、

     // for...in遍历数组
        NSArray *array =@[@"aMeng", @"aSha", @"aBen"];
        NSDictionary *dict2 = @{
                        @"name" : @"aGen",
                        ",
                        @"sex"  : @"男",
                        @"hobby": @"nana"
                                };
        NSSet *set2 = [NSSet setWithObjects:@"nana", @"zhouyuqi", @"shuaige", @"mengboy", @"王海", @"刘傲然", @"小强", nil];
        for (NSString *string in array) {
            NSLog(@"%@", string);
        }
        // for...in遍历字典(得到的是key)
        for (NSString *key in dict2) {
            // 通过key访问
//            NSLog(@"%@", dict2[key]);
            NSLog(@"%@",[dict2 objectForKey:key]);
        }
        // for...in遍历集合(得到的是集合的元素对象)
        for (NSString *setString in set2) {
            NSLog(@"%@", setString);
        }
//        定义一个数组, 包含5个字符串对象, 取出数组中所有字符串, 并拼接生成一个新的字符串。

        NSMutableArray *marrays = [NSMutableArray arrayWithObjects:@"abc", @"def", @"hig", @"klm" ,@"nop", nil];
        NSMutableString *strings1 = [NSMutableString string];
        for (NSString *value in marrays) {
            NSLog(@"%@", value);
            [strings1 appendString:value];
        }
        NSLog(@"%@", strings1);
//        使用 for...in... 完成:定义一个字典, 用于存储一个人的name, sex, age三个数据,  for...in...遍历, 输出此人的name到控制台

        NSMutableDictionary *dics = [NSMutableDictionary dictionaryWithObjectsAndKeys:", @"age", nil];
        for (id value in dics) {
            if ([value isEqualToString:@"name"]) {
                NSLog(@"%@", [dics objectForKey:value]);
            }
        }
五、数组排序
     1、数组是有序容器,因此集合中只有数组才能排序。
     2、

     // 1.使用NSSrotDescriptor (排序描述符,相当于排序条件)

        // 给排序的数组生成排序描述符
        // 排序描述符由两个参数组成
        // key(键):对于一个给定的集合,对应值的键位将对集合中的每个元素进行排序
        // ascending:升序(YES),降序(NO)。
        NSSortDescriptor *arraySortDes =[[NSSortDescriptor alloc]initWithKey:@"self" ascending:YES];
        // 不可变的数组排序
        [array sortedArrayUsingDescriptors:@[arraySortDes]];

        for (NSString *obj in array) {
            NSLog(@"%@", obj);
        }
        // 可变数组排序
        [mArray sortUsingDescriptors:@[arraySortDes]];
        for (NSString *str in mArray) {
            NSLog(@"%@", str);
        }
        // 数组中存放自定义对象进行排序
        NSSortDescriptor *arrayByNameSortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
       personArray = [personArray sortedArrayUsingDescriptors:@[arrayByNameSortDes]];
        for (id obj in personArray) {
            NSLog(@"%@", obj);
        }
        NSSortDescriptor *arrayByNameSortDes = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
        personArray = [personArray sortedArrayUsingDescriptors:@[arrayByNameSortDes]];
        for (id obj in personArray) {
            NSLog(@"%@", obj);
        }
        // 将personMarry按照姓名降序排列
        NSSortDescriptor *mSortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
        [personMarray sortUsingDescriptors:@[mSortDes]];
        NSLog(@"%@", personMarray);

        //2.数组排序,使用数组中两个元素比较的方法名排序

        // 不可变数组
        SEL sel = @selector(compare:);
        array = [array sortedArrayUsingSelector:sel];
        NSLog(@"%@", array);

        // 可变的数组
        [mArray sortUsingSelector:@selector(compare:)];
        NSLog(@"%@", mArray);

        // 数组元素是自定义类型的对象
        // 不可变数组排序
        // 方法是自己定义的
        // 按照姓名比较
        personArray = [personArray sortedArrayUsingSelector:@selector(compareByName:)];
        NSLog(@"%@", personArray);
        personArray = [personArray sortedArrayUsingSelector:@selector(compareByAge:)];
        NSLog(@"%@", personArray);
        [personMarray sortUsingSelector:@selector(compareByName:)];         NSLog(@"%@", personMarray);
        [personMarray sortUsingSelector:@selector(compareByAge:)];
        NSLog(@"%@", personMarray);                    

iOS学习之Object-C语言集合遍历和数组排序的更多相关文章

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

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  2. iOS学习08之C语言内存管理

    本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...

  3. iOS学习07之C语言指针

    本次随笔主要是为了学习和理解C语言中的指针,指针树状图如下: 1.访问数据的两种方式 1> 直接访问:定义变量后,直接访问变量 ; printf("a = %d\n", a) ...

  4. 2018/1/8 学习汇总,kettle简单介绍,集合遍历方式的选择及原理,防止表单重复提交的后台解决方案

    昨天因为当前这个二次开发项目的接近尾声,要求我们将生产环境数据库里的数据迁移到现在新的数据库来,但老数据库里是sqlserver而新数据库则是ORACLE,不仅仅面对着数据库数据类型结构不一致的问题, ...

  5. iOS 学习 - 6.Objective-C中的各种遍历(迭代)方式

    说明:转自文顶顶 一.使用 for 循环 要遍历字典.数组或者是集合,for 循环是最简单也用的比较多的方法 -(void)iteratorWithFor { //////////处理数组////// ...

  6. 【IOS学习】【Swift语言】

    基本语法: OS X playground 引入 import Cocoa IOS playground 引入 import UIKit 基本数据类型 let 定义常量 定义完成之后无法修改 var ...

  7. ios学习之旅---c语言函数

    1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...

  8. iOS学习笔记---oc语言第五天

    字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...

  9. IOS各种集合遍历效率对比

    前言: 对于ios项目开发中总会遇见各种集合遍历,出于对各种遍历效率的好奇心,所以准备写个测试程序测试一下 首先:先声明一个NSMutableArray,测试数据量分别是1000条,10000条,10 ...

随机推荐

  1. ES6生成器基础

    ES6引进的最令人兴奋的特性就是一种新的函数生成方式,称为生成器(generator).名称有点奇怪,但是第一眼看上去行为更加奇怪.文章主要介绍生成器如何工作,然后让你明白为什么他们对于未来的JS会有 ...

  2. 使用Servlet处理请求<http://blog.sina.com.cn/s/blog_5d3fb3cc0100ep9q.html>

    一.GET和POST的区别 1.GET提交的是文本内容,规定其数据长度不超过255个字符.在GET方式提交的URL中会显示出提交的查询数据而却提交数据的缓存会在浏览器的URL历史状态中,这样我们往往在 ...

  3. 【Hibernate 8】Hibernate的调优方法:抓取策略

    在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetchin ...

  4. SQLServer 窗口函数

    一.窗口函数的作用 窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列.窗口函数,基础列和聚合列的查询都非常简单. 二.语法格式 窗 ...

  5. WWF3入门<第一篇>

    工作流是什么东西?暂时还不是很弄得清除. 工作流是用来解决什么问题的?暂时只是形成了一个很模糊的概念,还没办法用语言描述出来. 一.入门范例 以VS2008为例,先来创建一个WWF程序. 在工具箱中, ...

  6. CSS常用的属性命名

    页头:header   如:#header{属性:属性值;}或.header{属性:属性值;},也许你需要了解class与id区别及用法 登录条:loginBar         标志:logo   ...

  7. 【转】DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)

    这两天正在学习FPGA如何控制DDR3的读写,找到一篇个人感觉比较有意义的文章,可以对DDR的内部结构有一个初步的了解.原文出处:http://blog.chinaunix.net/uid-28458 ...

  8. s3c6410_中断

    参考: 1)<USER'S MANUAL-S3C6410X>Chapter 10 GPIO, Chapter 12 VECTORED INTERRUPT CONTROLLER 2)< ...

  9. Linux 不挂载设备,获取设备的文件系统信息

    块设备挂载后,可以通过df 或者 mount命令查看设备的文件系统信息.然而,有时候需要在不挂载设备的情况下予以判断,此时可以使用如下的方法: (1)查看文件系统类型 命令: file -sL /de ...

  10. 图片轮播jQuery

          <script type="text/javascript">         //图片轮播         var bannerIndex = 0; ba ...