zoukankan      html  css  js  c++  java
  • 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,不会进行交换,那么还是升序。

     

     

  • 相关阅读:
    前端使用 node-gyp 构建 Native Addon
    CHANGELOG 的实现
    深入 JavaScript 中的对象以及继承原理
    使用electron进行原生应用的打包(2)---主进程与渲染进程之间的通信
    使用electron进行原生应用的打包
    Babel编译
    HTML布局四剑客-Flex,Grid,Table,Float
    关于vtt 与 srt 字幕 的相互转换
    关于websocket
    关于jQuery中nth-child和nth-of-type的详解
  • 原文地址:https://www.cnblogs.com/hyl2012/p/5213043.html
Copyright © 2011-2022 走看看