博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC第六节 遍历集合、数组排序
阅读量:5067 次
发布时间:2019-06-12

本文共 1565 字,大约阅读时间需要 5 分钟。

1、遍历的⽅式?for、枚举器、forin。

    ①.for循环同C语言,循环条件是集合的元素个数或键值对个数,无序的集合要先转换成数组在根据下标遍历

    ②.枚举器 NSEnumerator 

    objectEnumerator (reverseObjectEnumerator)   创建枚举器(反向枚举器)

    nextObject  与while循环连用,遍历集合

    ③. for … in :快速枚举,是在NSEnumerator的基础上封装的更加方便的快熟便立即和元素的方式,格式如下:

      for (<#type *object#> in <#collection#>) {

          <#statements#>

      }

       type *object: type *  代表从集合中获取到的对象类型

       object 只是一个名称,只需要满足变量名命名法则即可

       collection 代表遍历的集合

       statements 遍历中需要执行的操作

     for in 遍历注意事项:

    for in 遍历可以使用嵌套,一般在字典中可以用到,先遍历key值,在value值里如果是集合,可以遍历集合元素

    for in 遍历相当与枚举器,所以在遍历时不能修改值,只能先用其他东西提取出来然后再赋值回去

 

2、三者的区别?

  ①. for⽤于知道容器中的对象个数

  ②. 枚举器,通常与while循环连⽤,nextObject只要能获取到对象,就继续执⾏枚举,直到空为⽌

  ③. forin内部封装了枚举器,forin和枚举器在遍历时不允许改变集合的容量。

 

3、使用NSSortDescriptor进行数组排序三步走

        1、创建一个用来排序的数组

        2、创建一个排序条件,也就是一个NSSortDescriptor对象,初始化中需要指定按照数组中对象中什么属性值排序,升序或者降序

       // 第一个参数为数组中对象要按照什么属性来排序(比如自身,姓名,年龄)

       // 第二个参数为指定排序方式是 升序还是 降序

        3、数组根据排序条件进行排序,得到一个排序之后的数组(如果是可变数组,不会生成新数组,还是本身)

 

4、创建⼀个NSSortDescriptor对象的方法(initWithKey方法)

      ①. sortedArrayUsingDescriptor:@[NSSortDescriptor对象,即排序方式]

      ②. sortedArrayUsingDescriptors  后面可以接多个NSSortDescriptor对象,对象之间哪个在前那个的优先级更高。

      ③. sortedArrayUsingSelector:SEL(@selector(⽅法名))  必须先要一个排序方法才能用

      注: // SEL类型的参数 只能用 @selector(方法名) 给定。

         // 如果数组使用这个方法进行排序,此方法必须是返回值为NSComparisionResult。

           // 数组排序 需要传入的方法参数 要的是方法的返回值,根据方法的返回值决定到底是按照升序排列还是降序排列。

 

5、猜测在默认排序方法(compare: )的实现

    /*  冒泡排序内部

         if (表达式 > 0) {

             交换;

         }  */

    //方法的返回值为1,说明前面的大于后面的,降序,那么表达式的值为1,进行交换后前面的就小于后面的了,所以就成了升序,compare: 方法就是默认升序的。

    //方法的返回值为2,说明前面的小于后面的,升序,那么表达式的值为-1,不会进行交换,那么还是升序。

 

 

转载于:https://www.cnblogs.com/hyl2012/p/5213043.html

你可能感兴趣的文章
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>