Scala入门系列(四):Map & Tuple
Map
- 创建Map
// 创建一个不可变的Map
scala> val ages = Map("Leo" -> 30, "Sparks" -> 25)
ages: scala.collection.immutable.Map[String,Int] = Map(Leo -> 30, Sparks -> 25)
// 创建一个可变的Map
scala> val ages = scala.collection.mutable.Map("Leo" -> 20, "JEN" -> 23)
ages: scala.collection.mutable.Map[String,Int] = Map(JEN -> 23, Leo -> 20)
scala> ages("Leo") = 31
// 使用另外一种方式定义Map元素
scala> val ages = Map(("leo", 30), ("sparks", 20))
ages: scala.collection.immutable.Map[String,Int] = Map(leo -> 30, sparks -> 20)
// 创建一个空的HashMap,必须是实现类而不是抽象接口
scala> val ages = new scala.collection.mutable.HashMap[String, Int]
ages: scala.collection.mutable.HashMap[String,Int] = Map()
- 访问Map元素
// 使用contains函数检查key是否存在
scala> val leoAge = if (ages.contains("Leo")) ages("Leo") else 0
leoAge: Int = 0
// getOrElse函数
scala> val leoAge = ages.getOrElse("Leo", 0)
leoAge: Int = 0
- 修改Map元素
// 添加或者更新元素
scala> ages("Leo") = 31
// 添加多个元素
scala> ages += ("Mike" -> 34, "Tom" -> 40)
// 移除元素
scala> ages -= "Mike"
// 变相更新不可变map
scala> val ages2 = ages + ("Mike" -> 34, "Tom" -> 40)
- 遍历Map
// 遍历map的entrySet
scala> for((key, value) <- ages) println(key + " " + value)
// 遍历key
scala> for(key <- ages.keySet) println(key)
// 遍历value
scala> for(value <- ages.values) println(value)
// 生成新map,反转key和value
scala> for((key, value) <- ages) yield (value, key)
- SortedMap & LinkedHashMap
// SortedMap可以自动对Map的key排序,按照字母顺序
scala> val ages = scala.collection.immutable.SortedMap("leo" -> 30, "alice" -> 15)
ages: scala.collection.immutable.SortedMap[String,Int] = Map(alice -> 15, leo -> 30)
// LinkedHashMap可以记住插入entry的顺序
scala> val ages = new scala.collection.mutable.LinkedHashMap[String,Int]
ages: scala.collection.mutable.LinkedHashMap[String,Int] = Map()
scala> ages("leo") = 30
scala> ages("Sparks") = 20
scala> ages
res70: scala.collection.mutable.LinkedHashMap[String,Int] = Map(leo -> 30, Sparks -> 20)
元组Tuple
Scala元组将固定数量的项目组合在一起,以便它们可以作为一个整体传递。 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的。(可以用作自定义数据类型)
// 创建Tuple
scala> val t = ("leo", 30, "hello")
t: (String, Int, String) = (leo,30,hello)
// 访问Tuple
scala> t._1
// zip操作
scala> val names = Array("leo", "jack", "mike")
names: Array[String] = Array(leo, jack, mike)
scala> val ages = Array(30, 24, 25)
ages: Array[Int] = Array(30, 24, 25)
scala> val nameAges = names.zip(ages)
nameAges: Array[(String, Int)] = Array((leo,30), (jack,24), (mike,25))
scala> for ((name, age) <- nameAges) println(name + ":" + age)
leo:30
jack:24
mike:25
Scala入门系列(四):Map & Tuple的更多相关文章
- C语言高速入门系列(四)
C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- Go语言入门系列(四)之map的使用
本系列前面的文章: Go语言入门系列(一)之Go的安装和使用 Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 1. 声明 map是一种映射,可以将键(key)映射到值(val ...
- Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、lookup(一)
1.以本地模式实战map和filter 2.以集群模式实战textFile和cache 3.对Job输出结果进行升和降序 4.union 5.groupByKey 6.join 7.reduce 8. ...
- Scala入门系列(五):面向对象之类
定义类 // 定义类,包含field以及method class HelloWorld { private var name = "Leo" def sayHello() { pr ...
- Scala入门系列(九):函数式编程
引言 Scala是一门既面向对象,又面向过程的语言,Scala的函数式编程,就是Scala面向过程最好的佐证.也真是因此让Scala具备了Java所不具备的更强大的功能和特性. 而之所以Scala一直 ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
- 【转载】 mybatis入门系列四之动态SQL
mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...
- Scala入门系列(十):函数式编程之集合操作
1. Scala的集合体系结构 Scala中的集合体系主要包括(结构跟Java相似): Iterable(所有集合trait的根trait) Seq(Range.ArrayBuffer.List等) ...
随机推荐
- 启动tomcat爆错 the JRE could not be found
启动报错,如下图: 之前更改了了一个较低的jdk的版本看了看一个项目的代码,不知所云,然后再改回来, 混乱之中只要启动Tomcat就出现这种错误,还是无法找到JRE,最后如此解决: 在Windows- ...
- GET_DDL提取目标元数据:ddl
创建对象的语句就是了 提取表 set line 200 pages 50000 wrap on long 999999 serveroutput on SQL> select dbms_meta ...
- [译]ASP.NET Core 2.0 网址重定向
问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter) ...
- 1031: [JSOI2007]字符加密Cipher
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7338 Solved: 3182[Submit ...
- empty()和remove()的区别
这两个都是删除元素,但是两者还是有区别的. remove()这个方法呢是删除被选元素的所有文本和子元素,当然包括被选元素自己. 而empty()呢,被选元素自己是不会被删除的. 比如: <div ...
- 高性能Ajax
XMLHttpRequest javascript 高性能的Ajax应该考虑数据传输技术和数据格式,以及其他的如数据缓存等优化技术. 一.请求数据 请求数据的常用技术有XHR,动态脚本注入.Mul ...
- android 横竖屏切换不重走生命周期
android在系统配置发生改变时,Activity会被重新创建,但是某些情况下我们希望系统配置改变时不会重新创建Activity,这个时候我们可以给Activity指定相对应的configChang ...
- java 猜系统获取的随机数
int randomNumber=(int)(Math.random()*8)+1; 注释是:得到一个1到8之间的随机整数. /************************************ ...
- DNA序列对齐问题
问题描述: 该问题在算法导论中引申自求解两个DNA序列相似度的问题. 可以从很多角度定义两个DNA序列的相似度,其中有一种定义方法就是通过序列对齐的方式来定义其相似度. 给定两个DNA序列A和B,对齐 ...
- C#的Random到底该怎么使用
先看代码: 在循环中,有的只NEW一个Random,有的每次都NEW 一个Random. Console.WriteLine("1.多个Random,默认随机种子,"); ; i ...