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

posted @ 2015-11-21 18:48  zhanggl  阅读(331)  评论(0编辑  收藏  举报