Scala第五天——Scala数据结构之映射、元组

本文详细介绍了Scala中的映射(Map)和元组,包括映射的创建、访问、修改、遍历,以及SortedMap和LinkedHashMap的特性。元组作为不同类型值的聚集,可以通过下标访问,常用于返回多个值。拉链操作用于合并两个集合的对应元素。同时,文中探讨了将函数映射到集合的应用,如map和flatmap在集合转换中的作用。
摘要由CSDN通过智能技术生成

本文部分参考自:https://blog.csdn.net/dataiyangu/article/details/98193842


Scala第五天——Scala数据结构之Map、Tuple

自己的话:漆黑的黑夜 表示着威胁 我选择诙谐

工作在堆叠 没兑现归结于那些理解

Scala映射、元组介绍及案例实操


一、映射

1.简介:

映射就是 key-value 的集合,就类似于 Java 中的 Map。

构造:

// 不可变构造映射
val scores =  Map ( "Alice" -> 10,  "Bob" -> 3,  "Cindy" -> 8)
// 可变映射
val scores1 = scala.collection.mutable.Map( "Alice" -> 10,  "Bob" -> 3,  "Cindy" -> 8)
// 空映射
val scores2 =  new scala.collection.mutable.HashMap[String, Int]
// 对偶,对偶就是只有两个元素的元组
"Alice" -> 10
// 对偶元组
val scores3 =  Map (( "Alice", 10), ( "Bob", 3), ( "Cindy", 8))
2.操作:
(1)创建Map
// 创建一个不可变的Map
val ages = Map("Leo" -> 30, "Jen" -> 25, "Jack" -> 23)
ages("Leo") = 31
<console>:13: error: value update is not a member of scala.collection.immutable.Map[String,Int]
       ages("Leo")=100
// 创建一个可变的Map
val ages = scala.collection.mutable.Map("Leo" -> 30, "Jen" -> 25, "Jack" -> 23)
ages("Leo") = 31
// 使用另外一种方式定义Map元素
val ages = Map(("Leo", 30), ("Jen", 25), ("Jack", 23))

// 创建一个空的HashMap
val ages = new scala.collection.mutable.HashMap[String, Int]
(2)访问Map的元素
// 获取指定key对应的value,如果key不存在,会报错
val leoAge = ages("Leo")
val leoAge = ages("leo")

// 使用contains函数检查key是否存在
val leoAge = if (ages.contains("leo")) ages("leo") else 0

// getOrElse函数
val leoAge = ages.getOrElse("leo", 0)
(3) 修改Map的元素
// 更新Map的元素
ages("Leo") = 31
// 增加多个元素
ages += ("Mike" -> 35, "Tom" -> 40)
// 移除元素
ages -= "Mike"
// 更新不可变的map
val ages2 = ages + ("Mike" -> 36, "Tom" -> 40)
// 移除不可变map的元素
val ages3 = ages - "Tom"
Array和ArrayBuffer可变还是不可变是指的长度
Map的可变与不可变是指的Map中是值
(4)遍历Map
// 遍历map的entrySet
for ((key, value) <- ages) println(key + " " + value)
// 遍历map的key
for (key <- ages.keySet) println(key)
// 遍历map的value
for (value <- ages.values) println(value)
// 生成新map,反转key和value
for ((key, value) <- ages) yield (value, key)
(5)SortedMap和LinkedHashMap
// SortedMap可以自动对Map的key的排序
val ages = scala.collection.immutable.SortedMap("leo" -> 30, "alice" -> 15, "jen" -> 25)

// LinkedHashMap可以记住插入entry的顺序
val ages = new scala.collection.mutable.LinkedHashMap[String, Int]
ages("leo") = 30
ages("alice") = 15
ages("jen") = 25
(6)操作总结与实操:
获取值:
val bobsScore = scores( “Bob”)
如果映射中没有值,则会抛出异常,使用 contains 方法检查是否存在
key。如果通过 映射.get() 这样的调用返回一个 Option 对象,要么是
Some,要么是 None。

更新值:
scores1( “Bob”) = 10
如果 Bob 没有则新增。
或者
scores1 += ( “Bob” -> 10, “Fred” -> 7)
scores1 -= “Alice”

你不能更新一个不可变映射,但是可以获取一个修改过的新映射。
意思就是不可变映射也可以做这些方法,只不过他会返回一个新的结构
val newScores = scores + ( “Bob” -> 10, “Fred” -> 7) // New map with update

迭代映射:
for ((k, v) <- scores) println (k + " is mapped to " + v)
for (v <- scores.keys) println (v)
for (v <- scores.values) println (v)

注意 , 不可变映射也可以调用方法 , 只不过产生新的映射 。新映射和老映射共享大部分结构。 可变映射是在原映射基础上进行修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.和 Java 的互操作

使用 JavaConversions 进行转换
在这里插入图片描述


二、元组

1.简介:

Map的元素类型—Tuple(元组)
元组是不同类型的值的聚集
在这里插入图片描述

2.操作:

元组使用 _1,_2,_3 来访问

val second = t._2

注意 : 元组是从 1 1 开始不是 0; 你可以把 t t ._2 改写成 t _2 但不能是 t_2; 元组可用于函数需要返回不止一个值得情况;使用元组的原因之一是把多个值绑在一起,以便他们能够被一起处理


三、元组——拉链操作

1.简介及操作:
(1)简介:

作用于两个集合,将对应的元素合并成一个元组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cf组成元组,be组成员组,ad组成元组

(2)操作:
// zip操作(拉链操作)
val names = Array("leo", "jack", "mike")
val ages = Array(30, 24, 26)
val nameAges = names.zip(ages)
for ((name, age) <- nameAges) println(name + ": " + age)
2.实例:

在这里插入图片描述
如上的拉链能够直接转换成map
在这里插入图片描述


四、 将函数映射到集合

这里map就是一个转换的操作
将一元函数应用于集合中的每一个元素。
map 应用于集合中的每一个元素,并产生转换后的一个新元素。
在这里插入图片描述
flatmap 同样应用于集合的每一个元素,对于每一个元素产出一个集合, 并将集合中的元素串接在一起。

在这里插入图片描述
定义了一个函数,输出一个vector。然后把这个函数输入给flatMap,经过了这个函数,就是把开始的lilst中的每个元素,经过转换在压入到list中


让优秀成为习惯


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值