Scala集合和遍历 2

简介: Scala集合和遍历

3.7 拉链与拉开

  • 拉链:使用zip将两个列表,组合成一个元素为元组的列表
  • 拉开:将一个包含元组的列表,解开成包含两个列表的元组

示例

有两个列表

第一个列表保存三个学生的姓名,分别为:zhangsan、lisi、wangwu

第二个列表保存三个学生的年龄,分别为:19, 20, 21

使用zip操作将两个列表的数据"拉"在一起,形成 zhangsan->19, lisi ->20, wangwu->21

参考代码

scala> val a = List("zhangsan", "lisi", "wangwu")
a: List[String] = List(zhangsan, lisi, wangwu)
scala> val b = List(19, 20, 21)
b: List[Int] = List(19, 20, 21)
scala> a.zip(b)
res1: List[(String, Int)] = List((zhangsan,19), (lisi,20), (wangwu,21))

示例

  • 将上述包含学生姓名、年龄的元组列表,解开成两个列表

参考代码

scala> res1.unzip
res2: (List[String], List[Int]) = (List(zhangsan, lisi, wangwu),List(19, 20, 21))

3.8 转换字符串

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

示例

  • 定义一个列表,包含以下元素:1,2,3,4
  • 使用toString输出该列表的元素

参考代码

scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> println(a.toString)
List(1, 2, 3, 4)

3.9 生成字符串

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

示例

  • 定义一个列表,包含以下元素1,2,3,4
  • 使用mkString,用冒号将元素都拼接起来

参考代码

scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> a.mkString
res7: String = 1234
scala> a.mkString(":")
res8: String = 1:2:3:4

3.10 并集

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

示例

  • 定义第一个列表,包含以下元素:1,2,3,4
  • 定义第二个列表,包含以下元素:3,4,5,6
  • 使用union操作,获取这两个列表的并集
  • 使用distinct操作,去除重复的元素

参考代码

scala> val a1 = List(1,2,3,4)
a1: List[Int] = List(1, 2, 3, 4)
scala> val a2 = List(3,4,5,6)
a2: List[Int] = List(3, 4, 5, 6)
// 并集操作
scala> a1.union(a2)
res17: List[Int] = List(1, 2, 3, 4, 3, 4, 5, 6)
// 可以调用distinct去重
scala> a1.union(a2).distinct
res18: List[Int] = List(1, 2, 3, 4, 5, 6)

3.11 交集

intersect表示对两个列表取交集

示例

  • 定义第一个列表,包含以下元素:1,2,3,4
  • 定义第二个列表,包含以下元素:3,4,5,6
  • 使用intersect操作,获取这两个列表的交集
scala> val a1 = List(1,2,3,4)
a1: List[Int] = List(1, 2, 3, 4)
scala> val a2 = List(3,4,5,6)
a2: List[Int] = List(3, 4, 5, 6)
scala> a1.intersect(a2)
res19: List[Int] = List(3, 4)

3.12 差集

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

示例

  • 定义第一个列表,包含以下元素:1,2,3,4
  • 定义第二个列表,包含以下元素:3,4,5,6
  • 使用diff获取这两个列表的差集
scala> val a1 = List(1,2,3,4)
a1: List[Int] = List(1, 2, 3, 4)
scala> val a2 = List(3,4,5,6)
a2: List[Int] = List(3, 4, 5, 6)
scala> a1.diff(a2)
res24: List[Int] = List(1, 2)

4 Set

Set(集)是代表没有重复元素的集合。Set具备以下性质:

  1. 元素不重复
  2. 不保证插入顺序

scala中的集也分为两种,一种是不可变集,另一种是可变集。

4.1 不可变集

4.1.1 定义

语法

创建一个空的不可变集,语法格式:

val/var 变量名 = Set[类型]()

给定元素来创建一个不可变集,语法格式:

val/var 变量名 = Set(元素1, 元素2, 元素3...)

4.1.2 示例一

定义一个空的不可变集

参考代码

scala> val a = Set[Int]()
a: scala.collection.immutable.Set[Int] = Set()

4.1.3 示例二

定义一个不可变集,保存以下元素:1,1,3,2,4,8

参考代码

scala> val a = Set(1,1,3,2,4,8)
a: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 8, 4)

4.1.4 基本操作

  • 获取集的大小(size
  • 遍历集(和遍历数组一致
  • 添加一个元素,生成一个Set(+
  • 拼接两个集,生成一个Set(++
  • 拼接集和列表,生成一个Set(++

4.1.5 示例

  1. 创建一个集,包含以下元素:1,1,2,3,4,5
  2. 获取集的大小
  3. 遍历集,打印每个元素
  4. 删除元素1,生成新的集
  5. 拼接另一个集(6, 7, 8)
  6. 拼接一个列表(6,7,8, 9)

参考代码

// 创建集
scala> val a = Set(1,1,2,3,4,5)
a: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
// 获取集的大小
scala> a.size
res0: Int = 5
// 遍历集
scala> for(i <- a) println(i)
// 删除一个元素
scala> a - 1
res5: scala.collection.immutable.Set[Int] = Set(5, 2, 3, 4)
// 拼接两个集
scala> a ++ Set(6,7,8)
res2: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 8, 4)
// 拼接集和列表
scala> a ++ List(6,7,8,9)
res6: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 9, 2, 7, 3, 8, 4)

5 可变集

5.1 定义

可变集合不可变集的创建方式一致,只不过需要提前导入一个可变集类。

手动导入:import scala.collection.mutable.Set

5.1.1 示例

  1. 定义一个可变集,包含以下元素: 1,2,3, 4
  2. 添加元素5到可变集中
  3. 从可变集中移除元素1

参考代码

scala> val a = Set(1,2,3,4)
a: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)                          
// 添加元素
scala> a += 5
res25: a.type = Set(1, 5, 2, 3, 4)
// 删除元素
scala> a -= 1
res26: a.type = Set(5, 2, 3, 4)

6 映射

Map可以称之为映射。它是由键值对组成的集合。在scala中,Map也分为不可变Map和可变Map。

6.1 不可变Map

6.1.1 定义

语法

val/var map = Map(键->值, 键->值, 键->值...)  // 推荐,可读性更好
val/var map = Map((键, 值), (键, 值), (键, 值), (键, 值)...)

6.1.2 示例

  1. 定义一个映射,包含以下学生姓名和年龄数据
"zhangsan", 30
"lisi", 40
  1. 获取zhangsan的年龄

参考代码

scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 40)
scala> val map = Map(("zhangsan", 30), ("lisi", 30))
map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 30)
// 根据key获取value
scala> map("zhangsan")
res10: Int = 30

6.2 可变Map

6.2.1 定义

定义语法与不可变Map一致。但定义可变Map需要手动导入import scala.collection.mutable.Map

6.2.2 示例

定义一个映射,包含以下学生姓名和年龄数据

"zhangsan", 30
"lisi", 40
  1. 修改zhangsan的年龄为20
scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30)
// 修改value
scala> map("zhangsan") = 20

7 Map基本操作

7.1 基本操作

  • 获取值(map(key))
  • 获取所有key(map.keys
  • 获取所有value(map.values
  • 遍历map集合
  • getOrElse
  • 增加key,value对
  • 删除key

7.2 示例

  1. 定义一个映射,包含以下学生姓名和年龄数据
"zhangsan", 30
"lisi", 40
  1. 获取zhangsan的年龄
  2. 获取所有的学生姓名
  3. 获取所有的学生年龄
  4. 打印所有的学生姓名和年龄
  1. 获取wangwu的年龄,如果wangwu不存在,则返回-1
  2. 新增一个学生:wangwu, 35
  3. 将lisi从可变映射中移除

参考代码

scala> val map = Map("zhangsan"->30, "lisi"->40)
map: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30)
// 获取zhagnsan的年龄
scala> map("zhangsan")
res10: Int = 30
// 获取所有的学生姓名
scala> map.keys
res13: Iterable[String] = Set(lisi, zhangsan)
// 获取所有的学生年龄
scala> map.values
res14: Iterable[Int] = HashMap(40, 30)
// 打印所有的学生姓名和年龄
scala> for((x,y) <- map) println(s"$x $y")
lisi 40
zhangsan 30
// 获取wangwu的年龄,如果wangwu不存在,则返回-1
scala> map.getOrElse("wangwu", -1)
res17: Int = -1
// 新增一个学生:wangwu, 35
scala> map + "wangwu"->35
res22: scala.collection.mutable.Map[String,Int] = Map(lisi -> 40, zhangsan -> 30, wangwu -> 35)
// 将lisi从可变映射中移除
scala> map - "lisi"
res23: scala.collection.mutable.Map[String,Int] = Map(zhangsan -> 30)

8 iterator迭代器

scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合

8.1 使用迭代器遍历集合

  • 使用iterator方法可以从集合获取一个迭代器
  • 迭代器的两个基本操作
  • hasNext——查询容器中是否有下一个元素
  • next——返回迭代器的下一个元素,如果没有,抛出NoSuchElementException
  • 每一个迭代器都是有状态的
  • 迭代完后保留在最后一个元素的位置
  • 再次使用则抛出NoSuchElementException
  • 可以使用while或者for来逐个返回元素

8.2 示例

  1. 定义一个列表,包含以下元素:1,2,3,4,5
  2. 使用while循环和迭代器,遍历打印该列表

参考代码

scala> val ite = a.iterator
ite: Iterator[Int] = non-empty iterator
scala> while(ite.hasNext) {
     | println(ite.next)
     | }
  1. 定义一个列表,包含以下元素:1,2,3,4,5
  2. 使用for 表达式和迭代器,遍历打印该列表

参考代码

scala> val a = List(1,2,3,4,5)
a: List[Int] = List(1, 2, 3, 4, 5)
scala> for(i <- a) println(i)
目录
相关文章
|
6月前
|
安全 Java Scala
Scala集合【上】
Scala集合【上】
|
Scala
162 Scala 集合
162 Scala 集合
43 0
|
6月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
6月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
5月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
27 0
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
107 2
|
6月前
|
Scala
Scala综合练习_基于以下List集合实现词频统计
Scala综合练习_基于以下List集合实现词频统计
48 0
|
Scala 索引
Scala集合和遍历 1
Scala集合和遍历
68 0
|
Java 大数据 Scala
大数据开发基础的编程语言的Scala的字符串/数组/集合
Scala是一种基于JVM的编程语言,它支持丰富的字符串、数组和集合操作。本文将介绍Scala中这些数据类型的概念和用法,帮助开发者更好地理解和应用这门语言。
80 0
|
Scala 缓存
scala 简要:集合
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
745 0