Scala学习四——映射和数组
一.本章要点
- Scala有十分易用的语言来创建,查询和遍历映射
- 你需要从可变和不可变的映射中做出选择
- 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射
- 你可以很容易地在Scala映射和Java映射之间来回切换
- 元祖可以用来聚集值
二.构造映射(哈希表)
构造不可变映射:
val scores=Map("Alice"->100,"Bob"->3,"Cindy"->8)
构造可变映射:
val scores=scala.collection.multable.Map("Alice"->10,"Bob"->3,"Cindy->8")
构造空映射:
val scores=scala.collection.multable.Map(String,Int)
注:也可以使用()替换->
三.获取映射中的值
使用()获取,如果没有该键会抛出异常,使用contains方法检查是否包含某个键,可以使用getOrElse方法获取。
四.更新映射中的值
可变映射:
直接更新:scores("Bob")=20
没有该键则增加新的值:scores("LYQ")=100
通过+=添加多个关系:scores+=("Bob"->11,"Fed"->23)
通过-=移除:scores-="Bob"
不可变映射:
可以获取包含所需要的更新的新映射:val newScores=scores+("Bob"->10,"Fed"->22)
通过-获取一个新的去掉该键的值:scores-=scores-"Alice"
五.迭代映射
迭代键值:for((k,v)<-映射) 处理k,v;
只处理键:scores.keySet();
只处理值:scores.values
六.已排序映射
不可变树形映射:val scores=scala.collections.immutable.SortedMap("Alice"->10,"Fred"->6,"Bob"->9)
可变的树形结构(Scala目前没有):可以用Java的TreeMap
按插入顺序访问所有键:val months=scala.collections.mutable.LinkedHashMap(.....)
七.与Java的互操作
八.元组
元组是不对类型的值的聚集,如(1,3.14,”Fred“)类型为Tuple3(Int,Double,java.lang.String),可以通过_1,_2,_3依次递增访问组元(如t._1,也可以把.替换为空格),也可以使用模式匹配获取元组组元(如:val (first,second,third)=t)。
九.拉链操作
如果有一个键的集合以及与之对应的值的集合,就可以使用拉链操作把它组合成一个映射:
keys.zip(values).toMap
十.练习
Scala学习四——映射和数组的更多相关文章
- Scala学习(四)---映射和元组
映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...
- Scala学习(四)练习
映射和元组&练习 1. 设置一个映射,其中包含你想要的一些装备,以及它们的价格.然后构建另一个映射,采用同一组键,但在价格上打9折 映射代码如下: object HelloScala{ def ...
- Scala学习 —— 元组&映射
再说集合之前,我们先来回顾一下映射&元祖 映射是键/值对偶的集合,Scala有一个通用的叫法--元组,也就是n个对象的聚集,并不一定要相同类型的.对偶不过是一个n=2的元祖.元祖对于那种需要将 ...
- Scala学习——数组/映射/元组
[<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...
- Scala学习(三)----数组相关操作
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...
- scala学习之第三天:数组的特性与使用技巧
1.数组 Scala数组与Scala序列是兼容的 - 在需要Seq[T]的地方可由Array[T]代替.最后,Scala数组支持所有的序列操作. 隐式转换 方法1:通过scala.collection ...
- [Scala]Scala学习笔记二 数组
1. 定长数组 如果你需要一个长度不变的数组,可以使用Scala中的Array. val nums = new Array[Int](10) // 10个整数的数组 所有元素初始化为0 val str ...
- NumPy 学习 第四篇:数组的基本操作
在数组中,用axis(轴)表示维度,对于三维数组,axis参数的取值通常有: 当axis=None时,表示把数组展开为一维数组: 当axis=0时,表示按照行(第一维)进行计算: 当axis=1时,表 ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
随机推荐
- Eratos筛法(筛选素数)
对于n以内的非素数必有k*n1=n(n1<n) 所以 可有p1,2p2,3p3把非素数筛选掉 实现代码: #include<iostream> #include<string ...
- SpringCloud(1)----基于RestTemplate微服务项目
在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上再添加SpringCloud框架. 下面 ...
- leetcode312 戳气球
动态规划 time O class Solution { public: int maxCoins(vector<int>& nums) { nums.insert(nums.be ...
- awk 分组求和
awk 分组求和 分组求和 awk '{s[substr($2,1,6)] += $1} END{for(i in s) {print i, s[i]/(1024*1024*1024)} }' fil ...
- selenium 等待时间
三种时间模式:1.隐性等待:①等待页面所有元素都加载完才执行下一步,如果在设定的时间内没有加载完成所有元素,则抛出异常②隐式等待对整个driver周期都起作用,即设置一次后,所有执行都会有效from ...
- CentOS7出现Unit iptables.service could not be found
CentOS7默认的防火墙不是iptables,而是firewalle. 出现此情况可能是iptables防火墙未安装. #停止firewalld服务 systemctl stop firewalld ...
- Python中webbrowser的用法
#coding:utf-8 import time import webbrowser as web import os import random #随机选择一个浏览器打开网页 def open_u ...
- mysql RPM 包比较全的网站
https://pkgs.org/download/mysql-devel https://pkgs.org/download/mysql-server https://pkgs.org/downlo ...
- Linux学习—maven安装
1.下载maven安装包 cd /usr/local/ wget http://mirror.bit.edu.cn/apache/maven/maven-//binaries/apache-maven ...
- 数据库文件结构、sqlserver ON [PRIMARY]
在sqlserver创建表的语句中,最后总来一句on[primary],这到底是什么意思? .联机丛书中CREATE TABLE的语法下似乎没有找到.最后终于发现,具体如下: 在CREATE TABL ...