Scala学习 —— 元组&映射
再说集合之前,我们先来回顾一下映射&元祖
映射是键/值对偶的集合,Scala有一个通用的叫法——元组,也就是n个对象的聚集,并不一定要相同类型的。对偶不过是一个n=2的元祖。元祖对于那种需要将两个或更多值聚集在一起特别有用。
1、创造映射
-> 操作符用来创建对偶,相对于圆括号("key", value)更易读
// 不可变映射
val map = Map("test1" -> 10, "test2" -> 20 )
// 可变映射
val map = scala.collection.mutable.Map("test1" -> 10, "test2" -> 20)
2、获取映射中的值
// 类似Java中的map.get()
val test1 = map.get("test1")
// 类似Java中contains方法,如果包含返回对应值,否则返回0
val test1 = map.getOrElse("test1", 0)
3、更新映射中的值
前提是在可变映射中
// 更新键值对偶
map(“test2”) = 22
// 增加键值对偶
map("test3") = 30
// 增加多个关系
map += ("test4" -> 40, "test5" -> 50)
// 移除某个键对应的值
map -= “test5”
//移除 某个键
map = map - “test5”
在不可变映射中
val newMap = map + ("new1" -> 10, "new2" -> 20) // 取得一个新映射包含所需更新
4、迭代映射
如下这段超简单的循环即可遍历映射中所有的键/值对偶
for ((k, v) <- 映射) 处理k和v
翻转映射,交替键值位置
for ((k, v) <- 映射) yield (v, k)
5、已排序映射
要得到一个不可变的树形映射而不是哈希映射的话可以用
val map = scala.collection.immutable.SortedMap()
如果要按照插入顺序访问所有键,使用LinkedHashMap
val map = scala.collection.mutable.LinkedHashMap()
6、元组
映射是键值对偶的集合。对偶是元组(tuple)的最简单形态,元组是不同类型的值的聚集。
元组的值是通过将单个的值包含在圆括号中构成的,例如 val t = (1, 3.14, "test")
可以使用_1、_2访问数组元
val second = t._2 // 可以使用_1, _2访问组元
// 通常使用模式匹配来获取元组的组元
val (first, second, third) = t // 将first设为1,second设为3.14,third设为“test”
// 可以在不需要的部位使用_
val (first, second, _) = t
"New York".partition(_.isUpper) // 输出对偶(“NY”, "ew ork")
7、拉链操作
使用元组可以把多个值绑定在一起,以便他们能够一起被处理,这通常可以使用zip方法来完成。
val symbols = Array("<", "-", ">")
val counts = Array(1, 10, 2)
val pairs = symbol.zip(counts)
Array(("<", 2), ("-", 10), (">", 2))
使用toMap方法可以将对偶的集合转换成映射。如果你有你一个键的集合,以及一个与之平行对应的值的集合,那么你就可以使用拉练操作将他们组成一个映射。
keys.zip(values).toMap
Scala学习 —— 元组&映射的更多相关文章
- Scala学习(四)---映射和元组
映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...
- Scala学习——数组/映射/元组
[<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...
- Scala学习四——映射和数组
一.本章要点 Scala有十分易用的语言来创建,查询和遍历映射 你需要从可变和不可变的映射中做出选择 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 你可以很容易地在Scala映射和J ...
- Scala学习之路 (四)Scala的数组、映射、元组、集合
一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...
- Scala学习笔记(五)—— 元组和集合
1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...
- scala学习手记5 - 元组与多重赋值
假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- Scala学习笔记(一)编程基础
强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html 1. Scala概述 1.1. 什么是Scala Scala是一种多范式的编程 ...
随机推荐
- A ship is always safe at the shore - but that is not what it is built for.
A ship is always safe at the shore - but that is not what it is built for. 船靠岸边总是安全的,但那不是建造它的目的.
- 8. apache服务实验笔记
Apache服务器 一 简介 1 www:world wide web 万维网 http 协议: 超文本传输协议 HTML语言: 超文本标识语言 2 URL:统一资源定位 协议+域名:端口+网页文 ...
- three.js初涉略(一)
<!-- 最近要研究一下webgl,发现了webgl中文网(http://www.hewebgl.com/article/articledir/1).边研究教程边做下记录 --> thre ...
- [转]iOS开发中@property的属性weak nonatomic strong readonly等介绍
转载地址: http://www.lvtao.net/ios/504.html @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后 ...
- NPOI 教程 - 2.1单元格合并
来源:http://liyingchun343333.blog.163.com/blog/static/3579731620091018212990/ 合并单元格在制作表格时很有用,比如说表格的标题就 ...
- 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前几名 胡晓波(93).宋沛颖(92).张舒帆(91).姚人天(90).曾奕博(90).杨彦婷(90).白睿(88).唐指朝(87).谢灵尧(87).蔡雪(87) 二.总成绩计算方 ...
- Hibernate ManyToOne, OneToMany的理解
User to Group, Many to One的关系 Test Case 1: session.beginTransaction(); user.setGroup(group); session ...
- Upgrade NE script with GUI but cannot support multithread, need to add soon
#-*- coding:utf-8 -*- __authour__='CC' from Tkinter import *import osimport telnetlibimport timeimpo ...
- Mifare系列6-射频卡与读写器的通信(转)
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415 1. 复位应答(Answer to request) 读写器呼叫磁 ...
- codeforces 748E Santa Claus and Tangerines
E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...