zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    分享一个小故事
    思维局限
    java程序员笑不死的经历ส้้้้้้้้้
    一些话
    定位 java虚拟机内存问题 个人总结
    关于分布式事务、两阶段提交协议、三阶提交协议(转)
    maven常用配置信息和常量
    Mybatis-常见SQL语句示例
    Redis主从同步原理-SYNC
    B+树在mysql数据库索引中的使用
  • 原文地址:https://www.cnblogs.com/zhanggl/p/4984512.html
Copyright © 2011-2022 走看看