一、构造映射

  val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) //key->value, (key,value)两种方式表示, 不可变映射,
val s = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44)//可变映射
val s1 = new scala.collection.mutable.HashMap[String, Int] //空的Map //scores.+=(("Lily"->10)) //不可变映射,map中不能新增元素
s.+=(("Lily"->10))
s1.+=(("Jim"->10)) println(scores)
println(s)
println(s1)

结果:

Map(Jim -> 10, Tom -> 20, Sam -> 44)
Map(Jim -> 10, Tom -> 20, Lily -> 10, Sam -> 44)
Map(Jim -> 10)

对偶

"A"->1

("A",1)

二、获取映射中的值

  val scores = Map("Jim"->10, ("Tom",20), "Sam"->44)

  val score1 = scores("Lily")  //直接通过()获取里面的值
val score2 = if(scores.contains("Lily")) scores("Lily") else 0 //判断是否存在,然后再取值
val score3 = scores.getOrElse("Lily",0) //通过getOrElse方法实现,不存在给默认值 println(score1)//没有值,会报异常
println(score2)
println(score3)

三、更新映射中的值

可变映射

  val scores = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44)

  scores("Jim") = 11      //更新值
scores("Fred") = 33 //新增值 scores += ("Lily"->30, "Li"-> 27) //增加多个
scores.+=(("Zhao"->44))
scores -= "Jim" //删除元素 println(scores)

结果

Map(Li -> 27, Zhao -> 44, Fred -> 33, Tom -> 20, Lily -> 30, Sam -> 44)

不可变映射  通过声明var变量来重新赋值,完成元素的增、删

  var scores = Map("Jim"->10, ("Tom",20), "Sam"->44)

  scores = scores +("Lily"-> 23)
scores -= "Jim" println(scores)

结果

Map(Tom -> 20, Sam -> 44, Lily -> 23)

四、迭代映射

  var scores = Map("Jim"->10, ("Tom",20), "Sam"->44)

  for((k, v) <- scores) println (k+","+v)
for(i<- scores.keySet) print(i+" ")
println()
for(i<- scores.values) print(i+" ")

结果

Jim,10
Tom,20
Sam,44
Jim Tom Sam
10 20 44

五、已排序映射

  val sortedScores = scala.collection.immutable.SortedMap("Jim"->10, ("Tom",20), "Sam"->44)
println(sortedScores)

结果

Map(Jim -> 10, Sam -> 44, Tom -> 20)

六、与Java的互操作

七、元组

  val tuple = (1, 3.14, "Hello")
println(tuple._1) //访问第一个元组,下标值不是0而是1
val(first, second, _) = tuple //获取元组的元素
println(second)

结果

1
3.14

八、拉链操作

把元组的多个值绑定在一起

  val symbols = Array("<","-",">")
val counts = Array(2,10,2)
val pairs = symbols.zip(counts) for((k,v)<- pairs) print(k * v)

结果

<<---------->>

keys.zip(values).toMap

通过拉链组合成映射

1.

    val m = Map(("a",10),("b",18),("d",17))
m.mapValues(_*0.9).foreach(println)

2.

    val m = new scala.collection.mutable.HashMap[String,Int]()
val in = new java.util.Scanner(new java.io.File("file/wordcount.txt"))
while(in.hasNext){
val key = in.next()
m(key)=if (m.contains(key)) m(key)+1 else 1
}

3.

    var word = Map[String,Int]()
val in = new java.util.Scanner(new java.io.File("file/wordcount.txt"))
while(in.hasNext){
val key = in.next()
word = word + ((key, if (word.contains(key)) word(key)+1 else 1))
}

4.

    var sortedWords = scala.collection.immutable.SortedMap[String,Int]()
val in = new java.util.Scanner(new java.io.File("file/wordcount.txt"))
while(in.hasNext){
val key = in.next()
sortedWords = sortedWords + ((key, if (sortedWords.contains(key)) sortedWords(key)+1 else 1))
}

5.

    import scala.collection.JavaConversions.mapAsScalaMap
var words:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String,Int]()
val in = new java.util.Scanner(new java.io.File("file/wordcount.txt"))
while(in.hasNext){
val key = in.next()
words(key)=if(words.contains(key)) words(key)+1 else 1
}

6.

    val week = new mutable.LinkedHashMap[String,Int]()
week("Monday")=java.util.Calendar.MONDAY
week("Tuesday")=java.util.Calendar.TUESDAY
week("Wednesday")=java.util.Calendar.WEDNESDAY for((k,v)<- week){
println(k,v)
}

7.

    import scala.collection.JavaConversions.propertiesAsScalaMap
val props:scala.collection.Map[String,String]=System.getProperties()
val len = props.keys.maxBy(_.length).length()
val format = "%-"+len+"s|%s\n"
for((k,v) <- props){
printf(s"${format}",k,v)
}

8. 匿名函数实现

    val minmax = (values:Array[Int])=>{
(values.max,values.min)
}

9.匿名函数实现

    val lteqgt = (values:Array[Int], v:Int)=>{
var lt=0
var eq=0
var gt=0
for(i<-values) if (i>v) gt+=1 else if(i==v) eq+=1 else lt+=1
(lt,eq,gt)
}

10.

Vector((H,W), (e,o), (l,r), (l,l), (o,d))

参考《快学Scala》

Scala--映射和元组的更多相关文章

  1. Scala映射与元组篇

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

  2. 【scala】 scala 映射和元组操作(四)

    1.映射  Map 定义 ,取值,遍历,排序 2. 元组 定义,取值,拉链操作 import scala.collection.mutable /** * 映射和元组 * * @author xwol ...

  3. scala映射和元组

    scala映射,是一对键值对,相当于java中的Map 对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value 映射就是对偶的集合 ...

  4. Scala从入门到精通之四-映射和元组

    在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点 Scala中映射的创建,遍历和查询 如何从可变和不可变映射中做出选择 Scala映射和Java映射见的互 ...

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

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

  6. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...

  7. Scala的映射和元组操作

    映射和元组操作 构造Map // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12 ...

  8. scala学习笔记(4)映射和元组

    1.构造映射 //构造这样的一个映射 val sources=Map(,,) //构造了一个不可变的Map[String,Int],值不能改变, //可变映射 val scores = new sca ...

  9. Scala从入门到放弃(三)Scala的数组、映射、元组和集合

    1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...

  10. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

随机推荐

  1. Django. No changes detected when "makemigrations"

    在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...

  2. Android Studio离线打包5+SDK

    dcloud官网下载最新版5+SDK 解压后,Android Studio导入HBuilder-Hello,选择From eclispe 修改assets/data/dcloud_control.xm ...

  3. 【Java入门提高篇】Day19 Java容器类详解(二)Map接口

    上一篇里介绍了容器家族里的大族长——Collection接口,今天来看看容器家族里的二族长——Map接口. Map也是容器家族的一个大分支,但里面的元素都是以键值对(key-value)的形式存放的, ...

  4. org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2。

    org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2. 今天在写完SQL进行查询的时候,后台一直报错显示上面的信息.看错误完全不知道原因,就重新检 ...

  5. CSS 小结笔记之滑动门技术

    所谓的滑动门技术,就是指盒子背景能够自动拉伸以适应不同长度的文本.即当文字增多时,背景看起来也会变长. 大多数应用于导航栏之中,如微信导航栏: 具体实现方法如下: 1.首先每一块文本内容是由a标签与s ...

  6. hashlib 简单的登录例子

    hashlib例子: =============================================== import hashlib md5 = hashlib.md5() md5.up ...

  7. 百度地图Key的设置方法

    一.为什么要设置百度Key 万能地图下载器提供了百度POI的下载功能,但由于本软件用户群极大,会导致一天之内访问量超出300万次以上而无法继续下载. 因此,当POI下载不成功能,用户可以自己申请百度地 ...

  8. python textwrap.md

    textwrap textwrap模块可以用来格式化文本, 使其在某些场合输出更美观. 他提供了一些类似于在很多文本编辑器中都有的段落包装或填充特性的程序功能. Example Data 本节中的示例 ...

  9. FFT && NTT板子

    贴板子啦-- FFT板子:luogu P3803 [模板]多项式乘法(FFT) #include<cstdio> #include<iostream> #include< ...

  10. Apache Commons Fileupload 反序列化漏洞分析

    下面是k8脚本. # -*- coding: utf-8 -*- # Oracle Weblogic Server (10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3) D ...