• scala 列表List


    列表: 列表是不可变,也就是说不能通过赋值改变列表的元素; 列表有递归结构,而数据是连续的

      List 类型:List() 同样也是List(String)

      列表是基于Nil (是空的)和::(列表从前端扩展) x :: xs 的一个第一个元素为x, 后面紧跟元素 xs

      列表的操作:

      head :返回列表的第一个元素

      tail: 返回除第一个之外所有元素组成的列表

      isEmpty:如果返回为空,则返回真

    head 和tail 方法仅能作用在非空列表上,如果在空上执行会抛异常

    def isort(sx: List[Int]): List[Int] =  {
        if (sx.isEmpty) Nil else isinsert(sx.head, isort(sx.tail))
      }
    
    def isinsert(x: Int,sx: List[Int]) : List[Int] =
        if (sx.isEmpty || x <= sx.head) x :: xs else sx.head :: isinsert(x, sx.tail)

    列表模式: List(...) 对所有的元素做匹配,可以使用:: 操作符和Nil 常量组成的模式逐位拆分

    使用匹配模式

     def isort2(sx: List[Int]) : List[Int] = sx match {
        case List() => List()
        case x :: sxl => insert2(x, isort2(sxl))  
      }
      
      def insert2(x: Int, xs: List[Int]): List[Int] = xs  match {
        case List() => List(x)
        case y :: ys => if (x <= y) x:: xs else y :: insert2(x, ys)
      }

    List 类的一阶方法

    xs::: ys结果依次是 sx , ys的新列表

    访问列表尾部 init 方法和last方法

    head 和tail 运行的都是常量,但是init和last 需要遍历整个列表以及算结果,所耗的时间和列表成正比

    reverse反转列表方法:某种原因需要访问列表尾部,可以先反正在处理

    前缀与后缀: drop, take和splitAt

  • 相关阅读:
    QSet<T>自定义类型需要定义==和qHash()函数
    《左耳听风》-ARTS-打卡记录-第十三周
    Windows中对窗口进行剪切
    Markdown 编写规范
    【洛谷 P1033】自由落体
    【GOJ 3032】司愁之路
    动态规划基础 3-解题报告
    前缀、中缀、后缀互相转换
    【GOJ 3015】疯狂外星人
    【GOJ 3010】有趣的数
  • 原文地址:https://www.cnblogs.com/zhanggl/p/4984512.html
Copyright © 2020-2023  润新知