金融类网站模板,抖音推广怎么收费,建设银行江苏省分行网站,郴州住房和城乡建设部网站Scala集合概述-链接
大家可以点击上方链接#xff0c;先对Scala的集合有一个整体的概念#x1f923;#x1f923;#x1f923; 在 Scala 中#xff0c;列表#xff08;List#xff09;分为不可变列表#xff08;List#xff09;和可变列表#xff08;ListBuffer先对Scala的集合有一个整体的概念 在 Scala 中列表List分为不可变列表List和可变列表ListBuffer。
1. 不可变列表List
List 是 Scala 中一种不可变的链表数据结构数据有顺序可重复 。一旦创建就不能修改其内容但可以通过操作返回新的列表。
创建不可变列表
// 创建一个空的 List
val emptyList: List[Int] List()// 创建一个包含初始元素的 List
val list1: List[Int] List(1, 2, 3, 4, 5)// 使用 :: 操作符创建 List
val list2: List[Int] 1 :: 2 :: 3 :: 4 :: 5 :: Nil添加元素 ::在列表头部添加一个元素:在列表尾部添加一个元素:在列表头部添加一个元素 val newList1 0 :: list // 在头部添加元素
val newList2 list : 6 // 在尾部添加元素
val newList3 0 : list // 在头部添加元素删除元素 tail返回去掉头部元素的列表drop删除前 n 个元素filter过滤掉不符合条件的元素 val tailList list1.tail // 去掉头部元素
val dropList list1.drop(2) // 删除前 2 个元素
val filteredList list1.filter(_ % 2 0) // 过滤掉奇数访问元素 head返回列表的第一个元素apply通过索引访问元素length返回列表的长度 val headElement list1.head // 返回第一个元素
val thirdElement list1(2) // 通过索引访问第三个元素
val length list1.length // 返回列表的长度遍历元素 foreach遍历所有元素map映射所有元素filter过滤元素 list1.foreach(println) // 遍历并打印所有元素val squaredList list1.map(x x * x) // 映射所有元素
println(squaredList.mkString(, )) // 输出: 1, 4, 9, 16, 25val evenNumbers list1.filter(_ % 2 0) // 过滤偶数
println(evenNumbers.mkString(, )) // 输出: 2, 4合并列表 合并两个列表 val list1 List(1, 2, 3)
val list2 List(4, 5, 6)
val combinedList list1 list2 // 结果: List(1, 2, 3, 4, 5, 6)反转列表 reverse反转列表 val reversedList list1.reverse // 结果: List(3, 2, 1)排序 sorted按自然顺序排序sortWith使用自定义比较器排序 val sortedList list1.sorted // 结果: List(1, 2, 3)
val customSortedList list1.sortWith(_ _) // 结果: List(3, 2, 1)查找元素 contains检查列表是否包含某个元素indexOf查找元素的索引lastIndexOf查找元素的最后一个索引 val contains2 list1.contains(2) // 结果: true
val index list1.indexOf(2) // 结果: 1
val lastIndex list1.lastIndexOf(2) // 结果: 1切片操作 slice返回列表的一部分take返回前 n 个元素drop删除前 n 个元素splitAt将列表分成两部分 val sliceList list1.slice(1, 3) // 结果: List(2, 3)
val takeList list1.take(2) // 结果: List(1, 2)
val dropList list1.drop(2) // 结果: List(3)
val (left, right) list1.splitAt(2) // 结果: (List(1, 2), List(3))转换操作 mkString将列表转换为字符串toString返回列表的字符串表示 val stringRepresentation list1.mkString(, ) // 结果: 1, 2, 3
val toStringRepresentation list1.toString // 结果: List(1, 2, 3)聚合操作 foldLeft从左到右聚合foldRight从右到左聚合reduce聚合所有元素 val sum list1.foldLeft(0)(_ _) // 结果: 6
val product list1.foldRight(1)(_ * _) // 结果: 6
val max list1.reduce((a, b) if (a b) a else b) // 结果: 3分组操作 groupBy根据某个条件分组 val grouped list1.groupBy(_ % 2 0) // 结果: Map(false - List(1, 3), true - List(2))2. 可变列表ListBuffer
ListBuffer 是 Scala 中一个可变的列表类位于 scala.collection.mutable 包中。可以高效地添加和删除元素。 创建可变列表
import scala.collection.mutable.ListBuffer// 创建一个空的 ListBuffer
val buffer ListBuffer[Int]()// 创建一个包含初始元素的 ListBuffer
val buffer2 ListBuffer(1, 2, 3, 4, 5)添加元素 在列表末尾添加一个元素在列表末尾添加多个元素prepend在列表头部添加一个或多个元素 buffer 1 // 在末尾添加一个元素
buffer List(2, 3, 4) // 在末尾添加多个元素
buffer.prepend(0) // 在头部添加一个元素
buffer.prependAll(List(-1, -2)) // 在头部添加多个元素删除元素 -删除一个元素--删除多个元素remove删除指定位置的元素 buffer - 1 // 删除一个元素
buffer -- List(2, 3) // 删除多个元素
buffer.remove(0) // 删除第一个元素访问和修改元素 索引访问使用索引访问和修改元素 val firstElement buffer(0) // 访问第一个元素
buffer(0) 10 // 修改第一个元素遍历元素 foreach遍历所有元素map映射所有元素filter过滤元素 buffer.foreach(println) // 遍历并打印所有元素val squaredBuffer buffer.map(x x * x) // 映射所有元素
println(squaredBuffer.mkString(, )) // 输出: 100, 36, 16val evenNumbersBuffer buffer.filter(_ % 2 0) // 过滤偶数
println(evenNumbersBuffer.mkString(, )) // 输出: 36转换为其他集合类型 toList转换为不可变的 ListtoArray转换为数组 val list buffer.toList // 转换为不可变的 List
val array buffer.toArray // 转换为数组合并列表 合并两个列表 val buffer1 ListBuffer(1, 2, 3)
val buffer2 ListBuffer(4, 5, 6)
buffer1 buffer2 // 结果: ListBuffer(1, 2, 3, 4, 5, 6)反转列表 reverse反转列表 val reversedBuffer buffer1.reverse // 结果: ListBuffer(6, 5, 4, 3, 2, 1)排序 sorted按自然顺序排序sortWith使用自定义比较器排序 val sortedBuffer buffer1.sorted // 结果: ListBuffer(1, 2, 3, 4, 5, 6)
val customSortedBuffer buffer1.sortWith(_ _) // 结果: ListBuffer(6, 5, 4, 3, 2, 1)查找元素 contains检查列表是否包含某个元素indexOf查找元素的索引lastIndexOf查找元素的最后一个索引 val contains2 buffer1.contains(2) // 结果: true
val index buffer1.indexOf(2) // 结果: 1
val lastIndex buffer1.lastIndexOf(2) // 结果: 1切片操作 slice返回列表的一部分take返回前 n 个元素drop删除前 n 个元素splitAt将列表分成两部分 val sliceBuffer buffer1.slice(1, 3) // 结果: ListBuffer(2, 3)
val takeBuffer buffer1.take(2) // 结果: ListBuffer(1, 2)
val dropBuffer buffer1.drop(2) // 结果: ListBuffer(3, 4, 5, 6)
val (leftBuffer, rightBuffer) buffer1.splitAt(2) // 结果: (ListBuffer(1, 2), ListBuffer(3, 4, 5, 6))转换操作 mkString将列表转换为字符串toString返回列表的字符串表示 val stringRepresentation buffer1.mkString(, ) // 结果: 1, 2, 3, 4, 5, 6
val toStringRepresentation buffer1.toString // 结果: ListBuffer(1, 2, 3, 4, 5, 6)聚合操作 foldLeft从左到右聚合foldRight从右到左聚合reduce聚合所有元素 val sum buffer1.foldLeft(0)(_ _) // 结果: 21
val product buffer1.foldRight(1)(_ * _) // 结果: 720
val max buffer1.reduce((a, b) if (a b) a else b) // 结果: 6分组操作 groupBy根据某个条件分组 val grouped buffer1.groupBy(_ % 2 0) // 结果: Map(false - ListBuffer(1, 3, 5), true - ListBuffer(2, 4, 6))