Scala序列List

馋奶兔 提交于 2020-01-25 08:10:19

Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable。
在 Scala 中集合有可变(mutable)和不可变(immutable)两种类型, immutable 类型的集合初始化后就不能改变了(注意与 val 修饰的变量进行区别)。

目录


不可变序列

导包

import scala.collection.immutable._

在 Scala 中列表要么为空(Nil 表示空列表)要么是一个 head 元素加上一个 tail 列表。
9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表。
注意: :: 操作符是右结合的,如 9 :: 5 :: 2 :: Nil 相当于 9 :: (5 :: (2 :: Nil))。

1. 构建List序列

// 构建不可变的序列
val lst = List(1,2,3)        // List(1, 2, 3)

2. 插入

//将 0 插入到 lst 的前面生成一个新的 List,几种方式
val lst2 = 0 :: lst
val lst3 = lst.::(0)
val lst4 = 0 +: lst
val lst5 = lst.+:(0)        // List(0, 1, 2, 3)

3. 追加

//将一个元素添加到 lst1 的后面产生一个新的集合
val lst6 = lst :+ 3        // List(1, 2, 3, 3)

4. 合并

val lst0 = List(1,2,3)
val lst1 = List(4,5,6)

//将 2 个 list 合并成一个新的 List
val lst2 = lst0 ++ lst1

//将 lst0 插入到 lst1 前面生成一个新的集合
val lst3 = lst0 ++: lst1

//将 lst0 插入到 lst1 前面生成一个新的集合
val lst4 = lst1.:::(lst0)

println(lst4)        // List(1, 2, 3, 4, 5, 6)


序列常用操作

构建列表

使用 :: 及 Nil 进行列表构建

val lst = 1 :: (2 :: (3 :: (4 :: Nil)))

// :: 操作符的优先级是从右往左,因此也可以这样写
val lst=1::2::3::4::Nil        // List(1, 2, 3, 4)

判断是否为空

lst.isEmpty        // false

 取第一个无素

lst.head            // 1

取除第一个元素外剩余的元素,返回的是列表

lst.tail            // List(2, 3, 4)

取列表第二个元素

lst.tail.head            // 2

取列表最后一个元素

nums.last            // 4

取除最后一个元素外的元素,返回的是列表

nums.init            // List(1, 2, 3)

List 连接操作

List(1,2,3):::List(4,5,6)        // List(1, 2, 3, 4, 5, 6)

列表元素倒置

nums.reverse            // List(4, 3, 2, 1)

一些方法调用

nums.reverse.reverse==nums        // true

nums.reverse.init                // List(4, 3, 2)

scala> nums.tail.reverse        // List(4, 3, 2)

丢弃前 n 个元素

lst.drop(1)            // List(2, 3, 4)

lst drop(2)            // List(3, 4)

lst drop 3             // List(4)

获取前 n 个元素

lst take 1             // List(1)

lst.take(3)            // List(1, 2, 3)

将列表进行分割

lst.splitAt(2)                // (List(1, 2),List(3, 4))

(lst.take(2),lst.drop(2))     // (List(1, 2),List(3, 4))

Zip 操作

var lst0=List(1,2,3,4)            // List(1, 2, 3, 4)

val chars=List('1','2','3','4')   // List(1, 2, 3, 4)

//返回的是 List 类型的元组(Tuple)
lst0 zip chars    // List[(Int, Char)] = List((1,1), (2,2), (3,3), (4,4))

toString

lst.toString            // String = List(1, 2, 3, 4)

mkString

lst.mkString            // 1234

转换成数组
 

nums.toArray            // Array(1, 2, 3, 4)

排序插入算法实现

  // 排序
  def isort(xs: List[Int]): List[Int] = {
    if (xs.isEmpty) Nil
    else insert(xs.head, isort(xs.tail))
  }

  // 插入
  def insert(x: Int, xs: List[Int]): List[Int] = {
    if (xs.isEmpty || x <= xs.head)
      x :: xs
    else 
      xs.head :: insert(x, xs.tail)
  }


可变序列

import scala.collection.mutable._

1. 构建可变列表

// 初始 3 个元素 1,2,3
val lst = ListBuffer[Int](1,2,3) 

创建空的可变列表

val lst = new ListBuffer[Int]

2. 追加

// 向 lst 中追加元素,注意:没有生成新的集合
lst += 4
lst.append(5)

// 将 lst1 中的元素追加到 lst0 中,注意:没有生成新的集合
lst0 ++= lst1

//将元素追加到 lst0 的后面生成一个新的集合
val lst3 = lst0 :+ 5 

3. 合并

// 将 lst0 和 lst1 合并成一个新的 ListBuffer 注意:生成了一个集合
val lst2= lst0 ++ lst1
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!