Scala 列表 (list) 和 列表常用的操作

概念

列表是scala中最重要的、也是最常用的数据结构。List具备以下性质:

  • 可以保存重复的值
  • 有先后顺序

在scala中,也有两种列表,一种是不可变列表、另一种是可变列表

不可变列表

概念

不可变列表就是列表的元素、长度都是不可变的。

定义

语法
//使用List(元素1, 元素2, 元素3, ...)来创建一个不可变列表,语法格式
val/var 变量名 = List(元素1, 元素2, 元素3...)
//使用Nil创建一个不可变的空列表
//使用 :: 拼接方式来创建列表,必须在最后添加一个 Nil
val/var 变量名 = 元素1 :: 元素2 :: Nil
代码示例
//创建一个不可变列表,存放以下几个元素(1,2,3,4)
val a = List(1,2,3,4)
//使用Nil创建一个不可变的空列表
val a = Nil
//使用 :: 方法创建列表,包含-2、-1两个元素
//完整写法
val d: List[Int] = -2 :: -1 :: Nil
//省略写法
val a = -2 :: -1 :: Nil

在这里插入图片描述

可变列表

概念

可变列表就是列表的元素、长度都是可变的。
要使用可变列表,先要导包
import scala.collection.mutable.ListBuffer

  • 可变集合都在mutable包中
  • 不可变集合都在immutable包中(默认导入)

定义

语法格式
//使用ListBuffer[元素类型]()创建空的可变列表,语法结构
val/var 变量名 = ListBuffer[Int]()
//使用ListBuffer(元素1, 元素2, 元素3...)创建可变列表,语法结构
val/var 变量名 = ListBuffer(元素1,元素2,元素3...)
代码示例
//导包
import scala.collection.mutable.ListBuffer
//创建空的整形可变列表
val a = ListBuffer[Int]()
//创建一个可变列表,包含以下元素:1,2,3,4
val a = ListBuffer(1,2,3,4)

在这里插入图片描述

可变列表的操作

  • 获取元素(使用括号访问(索引值)
  • 添加元素(+=
  • 追加一个列表(++=
  • 更改元素(使用括号获取元素,然后进行赋值
  • 删除元素(-=
  • 转换为List(toList
  • 转换为Array(toArray
代码示例
//导包
import scala.collection.mutable.ListBuffer
//1. 定义一个可变列表包含以下元素:1,2,3
  val a: ListBuffer[Int] = ListBuffer(1,2,3)
  //2. 获取第一个元素
  //方式一
  a(0)
  //方式二
  a.head
  //3. 添加一个新的元素:4
  a += 4
  //4. 追加一个列表,该列表包含以下元素:5,6,7
  a ++= List(5,6,7)
  //5. 删除元素7
  a -= 7
  //6. 将可变列表转换为不可变列表
  a.toList
  //7. 将可变列表转换为数组
  a.toArray

在这里插入图片描述

列表常用的操作

  • 插入数据 (inserrt)
  • 删除数据 (remove)
  • 列表去重(distinct)
  • 判断列表中是否包含某个元素(contains)
  • 判断列表是否为空(isEmpty
  • 拼接两个列表(++
  • 获取列表的首个元素(head)和剩余部分(tail)
  • 反转列表(reverse
  • 获取前缀(take)、获取后缀(drop
  • 扁平化(flatten
  • 拉链(zip)和拉开(unzip
  • 转换字符串(toString
  • 生成字符串(mkString
  • 并集(union
  • 交集(intersect
  • 差集(diff

插入数据

代码示例
//定义一个可变列表,包含以下元素:1,2,3,4
import scala.collection.mutable.ListBuffer
var list1 = ListBuffer("a", "b", "c", "d", "e");
//在开始位置插入 "t"
list1.insert(0,"t") 
//在开始位置插入 "m" 和 "n"
list1.insert(0,"m","n")

在这里插入图片描述

删除数据

代码示例
//从索引2开始删除后面的三个元素
list1.remove(2,3)

在这里插入图片描述

判断列表中是否包含某个元素 和 列表去重

代码示例
//判断列表中是否包含 a  (已存在)
list1.contains("a")
//再添加一个 a
list1 += "a"
//列表去重
list1.distinct

在这里插入图片描述

判断列表是否为空

代码示例
//定义一个列表,包含以下元素:1,2,3,4
val a = List(1,2,3,4)
//判空
a.isEmpty

在这里插入图片描述

拼接两个列表

代码示例
//定义列表一 
val a = List(1,2,3)
//定义列表二 
val b = List(4,5,6)
//拼接
a ++ b

在这里插入图片描述

获取列表的首个元素和剩余部分

代码示例
//定义一个列表
val a = List(1,2,3)
//获取首个元素 
a.head
//获取剩余部分
a.tail

在这里插入图片描述

反转列表

代码示例
//定一个列表,包含以下元素:1,2,3
val a = List(1,2,3)
//反转
a.reverse

在这里插入图片描述

获取列表前缀和后缀

代码示例
//定一个列表,包含以下元素:1,2,3,4,5
val a = List(1,2,3,4,5)
//使用take方法获取前缀(前三个元素):1,2, 3
 a.take(3)
//使用drop方法获取后缀(除前三个以外的元素):4,5
 a.drop(3)

在这里插入图片描述

扁平化(压平)

扁平化表示将列表中的列表中的所有元素放到一个列表中。

代码示例
//有一个列表,列表中又包含三个列表,分别为:List(1,2)、List(3)、List(4,5)
val a = List(List(1,2), List(3), List(4,5))
//使用flatten将这个列表转换为List(1,2,3,4,5)
a.flatten

在这里插入图片描述

转换字符串

toString方法可以返回List中的所有元素

代码示例
//定义一个列表,包含以下元素:1,2,3,4
val a = List(1,2,3,4)
//使用toString输出该列表的元素
println(a.toString)

在这里插入图片描述

生成字符串

mkString方法,可以将元素以分隔符拼接起来。默认没有分隔符

代码示例
	//定义一个列表,包含以下元素1,2,3,4
 	 val a = List(1,2,3,4)
	//使用mkString,用冒号将元素都拼接起来
	a.mkString(":")

在这里插入图片描述

并集

union表示对两个列表取并集,不去重

代码示例
	// 定义第一个列表,包含以下元素:1,2,3,4
	val a = List(1,2,3,4)
	// 定义第二个列表,包含以下元素:3,4,5,6
	val b = List(3,4,5,6)
	// 使用union操作,获取这两个列表的并集
	a.union(b)
	// 使用distinct操作,去除重复的元素
	a.union(b).distinct 

在这里插入图片描述

交集

intersect表示对两个列表取交集

代码示例
// 定义第一个列表,包含以下元素:1,2,3,4
val a1 = List(1,2,3,4)
// 定义第二个列表,包含以下元素:3,4,5,6
val a2 = List(3,4,5,6)
// 使用intersect操作,获取这两个列表的交集
a1.intersect(a2)

在这里插入图片描述

差集

diff表示对两个列表取差集,例如: a1.diff(a2),表示获取a1在a2中不存在的元素

代码示例
//定义第一个列表,包含以下元素:1,2,3,4
val a1 = List(1,2,3,4)
//定义第二个列表,包含以下元素:3,4,5,6
val a2 = List(3,4,5,6)
//使用diff获取这两个列表的差集
a1.diff(a2)

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scala 中,List 和 Seq 是非常常用的集合类型,而元组(Tuple)则是一种特殊的数据结构,它可以用来存储不同类型的数据。下面是它们的增删改查操作: ### List List 是不可变的序列,因此不能直接进行增删改操作,但是可以通过一些函数来实现类似的效果。 #### 增加元素 有两种方式可以增加元素List 中: 1. 使用 `::` 运算符添加元素List 的头部: ```scala val list1 = List(1, 2, 3) val list2 = 0 :: list1 // list2: List(0, 1, 2, 3) ``` 2. 使用 `:+` 运算符添加元素List 的尾部: ```scala val list1 = List(1, 2, 3) val list2 = list1 :+ 4 // list2: List(1, 2, 3, 4) ``` #### 删除元素 同样不能直接删除 List 中的元素,但是可以使用一些函数来实现类似的效果: 1. 使用 `drop` 函数删除 List 前面的 n 个元素: ```scala val list1 = List(1, 2, 3) val list2 = list1.drop(1) // list2: List(2, 3) ``` 2. 使用 `dropRight` 函数删除 List 后面的 n 个元素: ```scala val list1 = List(1, 2, 3) val list2 = list1.dropRight(1) // list2: List(1, 2) ``` #### 修改元素 由于 List 不可变,因此不能直接修改 List 中的元素。但是可以使用 `map` 函数对 List 中的每一个元素进行修改,生成一个新的 List: ```scala val list1 = List(1, 2, 3) val list2 = list1.map(_ * 2) // list2: List(2, 4, 6) ``` ### Seq Seq 是一个特质(Trait),它将所有的序列类型继承在了一起。与 List 类似,Seq 也是不可变的序列,因此不能直接进行增删改操作。 #### 增加元素 可以使用 `:+` 运算符来添加元素到 Seq 的尾部: ```scala val seq1 = Seq(1, 2, 3) val seq2 = seq1 :+ 4 // seq2: Seq(1, 2, 3, 4) ``` #### 删除元素 可以使用 `drop` 和 `dropRight` 函数来删除 Seq 中的元素,用法与 List 类似。 #### 修改元素 可以使用 `map` 函数对 Seq 中的每一个元素进行修改,用法与 List 类似。 ### Tuple 元组是一组有序的值的集合,它可以包含不同类型的数据。元组的元素是不可变的,因此不能进行修改操作。 #### 访问元素 可以通过元组的下标来访问元素,下标从 1 开始: ```scala val tuple = (1, "hello", true) val first = tuple._1 // 1 val second = tuple._2 // "hello" val third = tuple._3 // true ``` #### 创建元组 可以使用圆括号和逗号来创建元组: ```scala val tuple = (1, "hello", true) ``` 也可以使用 `Tuple` 类来创建元组: ```scala val tuple = Tuple3(1, "hello", true) // 等同于 (1, "hello", true) ``` #### 解构元组 可以使用模式匹配和元组来解构元组: ```scala val tuple = (1, "hello", true) val (a, b, c) = tuple println(a) // 1 println(b) // "hello" println(c) // true ``` 以上就是 ScalaList、Seq 和 Tuple 的增删改查操作。需要注意的是,List 和 Seq 是不可变的序列,因此不能直接进行增删改操作,而是通过一些函数来实现类似的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值