一、构造映射

  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》

最新文章

  1. yii2创建数据表
  2. tomcat,zookeeper,activeMQ,Kafka设置jvm参数
  3. C#接扣和抽象类
  4. C#的默认可访问性级别
  5. celery 快速入门教程 celery 定时器
  6. javascript中的this应用
  7. hibernate的dao中参数的传递取值
  8. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]
  9. HTTP层 &mdash;&mdash; 验证
  10. android 换肤模式总结
  11. MVVM in Depth
  12. Menubutton按钮弹出菜单
  13. 【Android】Android 多个APK数据共享
  14. day 50 JS框架基础
  15. C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息
  16. apicloud 消息推送与接收
  17. 1.VBA 基本概念——《Excel VBA 程序开发自学宝典》
  18. 【Cf Edu #47 F】Dominant Indices(长链剖分)
  19. ThinkPHP重写规则优化URL及Rewrite规则详细说明
  20. Xcode 工程文件“.xcodeproj”文件夹解析

热门文章

  1. easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)
  2. C++调用IDL程序的做法(三)
  3. 微信小程序开发--宽为百分百,页面仍可左右滑动
  4. ListView 添加 HeaderView常见错误
  5. Expo大作战(十)--expo中的App Icon,expo中的Assets,expo中的ErrorHandling错误处理
  6. Oracle EBS 物化视图
  7. Solving the SQL Server Multiple Cascade Path Issue with a Trigger (转载)
  8. 反向代理负载均衡调度:nginx
  9. Windows10下python3.5的sklearn库安装
  10. 基础知识整理汇总 - Java学习(一)