OC第六节 遍历集合数组排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC第六节 遍历集合数组排序相关的知识,希望对你有一定的参考价值。

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,不会进行交换,那么还是升序。

 

 

以上是关于OC第六节 遍历集合数组排序的主要内容,如果未能解决你的问题,请参考以下文章

第六节课

iOSDay16之集合遍历和数组排序

第六节课:元组和集合

第六节:mybatis小技巧

第六节 Go数据结构之集合

Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)