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

     

     

  • 相关阅读:
    pytest+allure详情版
    【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required
    Docker-Portainer
    滑动解锁和截图
    调用JavaScript(浏览器滚动条)
    WebDriver操作cookie
    下载文件
    多表单切换
    利用parameterized模块进行unittest参数化
    关于软件测试必备的技能
  • 原文地址:https://www.cnblogs.com/hyl2012/p/5213043.html
Copyright © 2020-2023  润新知