scala映射和元组
2024-08-28 22:52:26
scala映射,是一对键值对,相当于java中的Map
对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value
映射就是对偶的集合
示例:
val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射
val socres= scala.collection.mutable.Map("Alice"->3,"Bob"->10,"Imok"->8) //可修改映射
创建一个空值的映射,需要选定一个映射的实现并给出类型参数
val socres = scala.collection.mutable.HashMap[String.Int]
映射的另一种表示方法
val scores = Map(("Alice",10),("Bob",10),("Imok,8"))
映射基本操作
1、取值
val v = socres("Alice") // 等价于 val v = socres.get("Alice").get
映射的get方法返回的是一个Option类对象,要么是Some,要么是None
val v = if(socres.contains("Bob")) socres("Bob") else 0 // 等价于 val v = socres.getOrElse("Bob",0)
2、更新、添加、删除
socres("Alice") = 19 //更新 socres+=("Fred"->7,"Tom"-> 16) //添加多个 socres-="Alice" //删除
3、不可变的映射虽然不能去修改,但是可以在其基础上做一些操作构建一个新的映射
val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射
val score3 = scores2 + ("Tom"->7,"Bob"->6) //Tom->7 添加了,"Bob"->6更新了 val score3 = scores2 - "Alice" //去掉 "Alice" 的新的映射
4、迭代映射
//迭代映射
for((k,v) <- socres)
println(k + ":" + v) //迭代键值k
for(k <- socres.keySet)
println(k + ":" + socres(k)) //迭代值 v
for(v <- socres.values)
println(v)
5、反转映射
for((k,v) <- socres) yield (v,k) //键值交换
6、 有序映射
SortedMap、LinkedHashMap
元组
元组是不同类型的值的聚集,对偶是元组的最简单的实现
val t = (1,3.14,"Fred") var second = t._2 //通过_1 _2 _3访问组元 ,另外一种表示方法 t _2
使用模式匹配获取组元
val t = (1,3.14,"Fred")
val (first,second,third) = t
println(first) //1
println(second) //3.14
println(third) //Fred
拉链操作
有一个键的集合,以及与之平行的值的集合,可以用拉链操作(zip方法)将它们组成一个映射
val symbools = Array("<","-",">")
val counts = Array(2,10,2)
val pairs = symbools.zip(counts) //构成对偶数组 Array((<,2)(-,10)(>,2)),可以同步toMap方法将对偶集合转换成映射 for(i <- 0 until pairs.length)
print(pairs(i)) // for((s,n) <- pairs) print(s*n)
最新文章
- 使用Nginx配置NodeJs程序(Windows平台)
- ES6 fetch函数与后台交互
- Lua笔记(2)
- jdbc基础 (三) 大文本、二进制数据处理
- WebForm分页浏览
- 【UOJ】【34】多项式乘法
- 安装Ubuntu双系统系列——更换源
- Smallest unused ID
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- SQL修炼道路上必看的书籍
- sqlplus入门使用
- 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean
- 搭建Python自动化测试环境+元素定位
- String与Integer问题
- scp 实现文件打包上传到linux
- w3m 在ubuntu中的使用
- 洛谷P3588 [POI2015]PUS
- Python3正则表达式(1)
- Java并发编程:什么是线程安全,以及并发必须知道的几个概念
- python之模块pydoc