再说集合之前,我们先来回顾一下映射&元祖

映射是键/值对偶的集合,Scala有一个通用的叫法——元组,也就是n个对象的聚集,并不一定要相同类型的。对偶不过是一个n=2的元祖。元祖对于那种需要将两个或更多值聚集在一起特别有用。

1、创造映射

-> 操作符用来创建对偶,相对于圆括号("key", value)更易读

  1. // 不可变映射
  2. val map = Map("test1" -> 10, "test2" -> 20 )
  3. // 可变映射
  4. val map = scala.collection.mutable.Map("test1" -> 10, "test2" -> 20)

2、获取映射中的值

  1. // 类似Java中的map.get()
  2. val test1 = map.get("test1")
  3. // 类似Java中contains方法,如果包含返回对应值,否则返回0
  4. val test1 = map.getOrElse("test1", 0)

3、更新映射中的值

前提是在可变映射中

  1. // 更新键值对偶
  2. map(“test2”) = 22
  3. // 增加键值对偶
  4. map("test3") = 30
  5. // 增加多个关系
  6. map += ("test4" -> 40, "test5" -> 50)
  7. // 移除某个键对应的值
  8. map -= test5
  9. //移除 某个键
  10. map = map - test5

在不可变映射中

  1. 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访问数组元

  1. val second = t._2 // 可以使用_1, _2访问组元
  2. // 通常使用模式匹配来获取元组的组元
  3. val (first, second, third) = t // 将first设为1,second设为3.14,third设为“test”
  4. // 可以在不需要的部位使用_
  5. val (first, second, _) = t
  6. "New York".partition(_.isUpper) // 输出对偶(“NY”, "ew ork")

7、拉链操作

使用元组可以把多个值绑定在一起,以便他们能够一起被处理,这通常可以使用zip方法来完成。

  1. val symbols = Array("<", "-", ">")
  2. val counts = Array(1, 10, 2)
  3. val pairs = symbol.zip(counts)

Array(("<", 2), ("-", 10), (">", 2))

使用toMap方法可以将对偶的集合转换成映射。如果你有你一个键的集合,以及一个与之平行对应的值的集合,那么你就可以使用拉练操作将他们组成一个映射。

  1. keys.zip(values).toMap

  

Scala学习 —— 元组&映射的更多相关文章

  1. Scala学习(四)---映射和元组

    映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...

  2. Scala学习——数组/映射/元组

    [<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...

  3. Scala学习四——映射和数组

    一.本章要点 Scala有十分易用的语言来创建,查询和遍历映射 你需要从可变和不可变的映射中做出选择 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 你可以很容易地在Scala映射和J ...

  4. Scala学习之路 (四)Scala的数组、映射、元组、集合

    一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...

  5. Scala学习笔记(五)—— 元组和集合

    1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...

  6. scala学习手记5 - 元组与多重赋值

    假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...

  7. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  8. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  9. Scala学习笔记(一)编程基础

    强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html 1.   Scala概述 1.1.  什么是Scala Scala是一种多范式的编程 ...

随机推荐

  1. 简明外贸报价单(Price List)范本

    简明外贸报价单(Price List)范本 简明外贸报价单(Price List)范本 报价单 Price List 报价日期:年 月   日 Supplier Address 供应商 公司地址 Co ...

  2. Instant Complexity - POJ1472

    Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...

  3. [LeetCode_5] Longest Palindromic Substring

    LeetCode: 5. Longest Palindromic Substring class Solution { public: //动态规划算法 string longestPalindrom ...

  4. laravel框架总结(十) -- 返回值

    以前用CI框架对于返回值没有过多关注,但是发现使用laravel框架的时候出现了一些小问题,特意实践总结了一些常用情形,希望对大家有所帮助   先理解几个概念: 1>StdClass 对象=&g ...

  5. Intellij IDEA 配置最简单的maven-struts2环境的web项目

    在idea里搭建maven项目 看着网上大神发的各种博客,然后自己搭建出来一个最简单的maven-strtus2项目,供初学者学习 新建project

  6. 通知Notification

    步骤: 1.调用getSystemService()获取NotificationManager:NotificationManager manager = (NotificationManager)g ...

  7. Usage: AddDimensionedImage imageFile outputFile eclipse 运行程序出错

    关于这个在eclipse中运行java程序的错,首先确认你的jdk,jre是否完整,并且与你的eclipse的位数相同,当然我相信这个错误大家应该都会去检查到. 第二个关于addDimensioned ...

  8. 超炫数字特效动画AE模板

    下载方式: 网盘地址+迅雷地址+迅雷地址+备份地址 <ignore_js_op> 本AE模板是由Videohive机构出品的超炫数字特效动画AE模板,Videohive The Numbe ...

  9. Making my own Autonomous Robot in ROS / Gazebo, Day 2: Enable the robot

    Day 2: Enable the robot Git Setting git checkout master git branch day2_enable_robot git push --set- ...

  10. C++备忘录

    参考资料: 1. <C++编程思想(第一卷)> 知识点: ● register变量:它是一种局部变量类型.它告诉编译器尽快访问该变量.一般会把变量放在寄存器中,但不保证一定会.不能得到或计 ...