列表: 列表是不可变,也就是说不能通过赋值改变列表的元素; 列表有递归结构,而数据是连续的
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