一、构造映射

  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. HTML5+CSS (简易nav设计)

    HTML部分: <!DOCTYPE html><html> <head> <title></title> <meta charset= ...

  2. React之设置元素的滚动条

    在React中,解耦了对DOM元素的操作,但有时我们确实需要对DOM操作,比如设置元素的滚动条,这时ref就满足了我们的需求 在低版本的react中,ref可以是一个string类型的属性,通过thi ...

  3. 安装vs2008出现MSI returned error code 1603的错误的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在win7 64位旗舰版上安装vs2008 ,一直停留在下面页面: 最后错误日志是: [12/12/16,15:39: ...

  4. ISDBT中CC的处理疑问

    一个针对日本的数字电视应用(ISDBT)里字幕处理有一些问题,规范文档庞大又复杂,读起来还觉得语焉不详.接手遗留项目尝试处理字幕显示的问题,边读spec边看代码,先猜测.试图理解既有逻辑,再分析问题产 ...

  5. 使用Picasso将加载的图片变成圆形

    http://blog.it985.com/14794.html,感谢该作者 Picasso的GITHUB地址:https://github.com/square/picasso. 怎么实现各种各样的 ...

  6. 项目报错:Caused by: java.lang.ClassNotFoundException: Didn't find class "..."on path: DexPathList

    项目报错: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.eshore.njb.MyApplicat ...

  7. [Java] 用 Comparator 实现排序

    最近正好用到Comparator,发现能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序算法,用起来很方便,所以简单记录一下. 本文地址:http://www.cnblogs. ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

  9. go语言练习:指针

    指针是一个变量,存储的是另一个变量的地址 package main import "fmt" func main() { var a string = "hello&qu ...

  10. SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法(转)

    写法: 假装有个表Shop,其中有一列ShopName,取100000到100050条数据. ROW_NUMBER 的写法 SELECT * FROM (SELECT ShopName , ROW_N ...