一、集合遍历
     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. SVN与TortoiseSVN实战:属性的奇技淫巧(一)

    硬广:<SVN与TortoiseSVN实战>系列已经写了六篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,预计再用三.四篇来结束这个系列. 本篇详解一下SVN的属 ...

  2. 【Linux】Centos部署MySQL

    将CentOS部署MySQL需要本地配置环境.本地编译MySQL,耗时较长的情况,优化为编译成型MySQL并打包,推送并按配置部署. 首先需要在一台机器配置好环境,搭个YUM源,并将所需要的包取出备用 ...

  3. 【缓存】.net中Cache管理操作

    隐藏行号 复制代码 ? 这是一段程序代码. using System; using System.Web; using System.Web.Caching; using System.Collect ...

  4. mysq 导入 导出

    导入 use legou_seller   set names utf8; source /Users/ldm/Desktop/ss.sql

  5. mem中需找特定字符

    memstr //find 'substr' from a fixed-length buffer //('full_data' will be treated as binary data buff ...

  6. netlink机制

    一.netlink机制简介 netlink是一种基于网络的机制,允许在内核内部以及内核与用户之间进行通信.正式定义见RFC3549.手册见netlink(3)和netlink(7).netlink(3 ...

  7. IEF could not decode Chinese character in IE history well

    My friend is working on some case, and she looks not in the mood. I ask her what's going on. She wan ...

  8. 深入浅出Nodejs读书笔记(转)

    Node简介 这一章简要介绍了Node,从中可以了解Node的发展历程及其带来的影响和价值. 为什么叫Node?起初,Ryan Dahl称他的项目为web.js,就是一个Web服务器,但是项目的发展超 ...

  9. 样式重置 取消input默认样式

    body, h1, h2, h3, h4, h5, h6, hr, p,blockquote, dl, dt, dd, ul, ol, li,pre, form, fieldset, legend, ...

  10. Android IOS WebRTC 音视频开发总结(五三)-- 国内IM & RTC SDK列表

    本文主要总结国内提供RTC SDK的产品,转载必须说明出处,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 自从开通邮件和微信公众号以来,很多 ...