Scala--映射和元组
一、构造映射
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--映射和元组的更多相关文章
- Scala映射与元组篇
*Scala有十分易用的语法来创建.查询和便利映射 *你需要从可变的和不可变的映射中做出选择 *默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 *你可以很容易地在Scala映射和Jav ...
- 【scala】 scala 映射和元组操作(四)
1.映射 Map 定义 ,取值,遍历,排序 2. 元组 定义,取值,拉链操作 import scala.collection.mutable /** * 映射和元组 * * @author xwol ...
- scala映射和元组
scala映射,是一对键值对,相当于java中的Map 对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value 映射就是对偶的集合 ...
- Scala从入门到精通之四-映射和元组
在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点 Scala中映射的创建,遍历和查询 如何从可变和不可变映射中做出选择 Scala映射和Java映射见的互 ...
- Scala学习(四)---映射和元组
映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...
- 快学Scala习题解答—第四章 映射和元组
4 映射和元组 4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作 ,"gun"->18 ...
- Scala的映射和元组操作
映射和元组操作 构造Map // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12 ...
- scala学习笔记(4)映射和元组
1.构造映射 //构造这样的一个映射 val sources=Map(,,) //构造了一个不可变的Map[String,Int],值不能改变, //可变映射 val scores = new sca ...
- Scala从入门到放弃(三)Scala的数组、映射、元组和集合
1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...
- 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合
前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...
随机推荐
- HTML5+CSS (简易nav设计)
HTML部分: <!DOCTYPE html><html> <head> <title></title> <meta charset= ...
- React之设置元素的滚动条
在React中,解耦了对DOM元素的操作,但有时我们确实需要对DOM操作,比如设置元素的滚动条,这时ref就满足了我们的需求 在低版本的react中,ref可以是一个string类型的属性,通过thi ...
- 安装vs2008出现MSI returned error code 1603的错误的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 在win7 64位旗舰版上安装vs2008 ,一直停留在下面页面: 最后错误日志是: [12/12/16,15:39: ...
- ISDBT中CC的处理疑问
一个针对日本的数字电视应用(ISDBT)里字幕处理有一些问题,规范文档庞大又复杂,读起来还觉得语焉不详.接手遗留项目尝试处理字幕显示的问题,边读spec边看代码,先猜测.试图理解既有逻辑,再分析问题产 ...
- 使用Picasso将加载的图片变成圆形
http://blog.it985.com/14794.html,感谢该作者 Picasso的GITHUB地址:https://github.com/square/picasso. 怎么实现各种各样的 ...
- 项目报错: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 ...
- [Java] 用 Comparator 实现排序
最近正好用到Comparator,发现能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序算法,用起来很方便,所以简单记录一下. 本文地址:http://www.cnblogs. ...
- 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)
机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...
- go语言练习:指针
指针是一个变量,存储的是另一个变量的地址 package main import "fmt" func main() { var a string = "hello&qu ...
- SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法(转)
写法: 假装有个表Shop,其中有一列ShopName,取100000到100050条数据. ROW_NUMBER 的写法 SELECT * FROM (SELECT ShopName , ROW_N ...