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)

最新文章

  1. 使用Nginx配置NodeJs程序(Windows平台)
  2. ES6 fetch函数与后台交互
  3. Lua笔记(2)
  4. jdbc基础 (三) 大文本、二进制数据处理
  5. WebForm分页浏览
  6. 【UOJ】【34】多项式乘法
  7. 安装Ubuntu双系统系列——更换源
  8. Smallest unused ID
  9. 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
  10. SQL修炼道路上必看的书籍
  11. sqlplus入门使用
  12. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean
  13. 搭建Python自动化测试环境+元素定位
  14. String与Integer问题
  15. scp 实现文件打包上传到linux
  16. w3m 在ubuntu中的使用
  17. 洛谷P3588 [POI2015]PUS
  18. Python3正则表达式(1)
  19. Java并发编程:什么是线程安全,以及并发必须知道的几个概念
  20. python之模块pydoc

热门文章

  1. gamemakerstudio:加载精灵
  2. EM自动任务导致数据库缓慢
  3. 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator
  4. wireshark抓取本地回环数据包
  5. libevent将信号封装为socket通知的核心代码
  6. Android(java)学习笔记33:注册广播接收者
  7. 【转】Android Fragment 真正的完全解析(上)
  8. 常用PowerShell命令
  9. Maximum Profit
  10. 【洛谷P1073】[NOIP2009]最优贸易