博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala中的Map使用例子
阅读量:6166 次
发布时间:2019-06-21

本文共 2404 字,大约阅读时间需要 8 分钟。

hot3.png

Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法。

(1)不可变Map

特点:

api不太丰富

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,只能写入一次值,其后只读

var a:Map[String,Int]=Map("k1"->1,"k2"->2)//初始化构造函数    a += ("k3"->3)//添加元素    a += ("k4"->4)//添加元素    a += ("k1"->100)//已经存在添加元素会覆盖    a -= ("k2","k1")//删除元素//    a("k1") = "foo"//不支持    println(a.contains("k6"))//是否包含某元素    println(a.size)//打印大小    println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值    a.foreach{case (e,i) => println(e,i)} //遍历打印1    for( (k,v)<-a ) println(k,v) //遍历打印2    println(a.isEmpty)//判断是否为空    a.keys.foreach(println)//只打印key    a.values.foreach(println)//只打印value    a=Map()//数据清空使用再次new    println(a.size)    a.toSeq.sortBy(_._1)//升序排序 key    a.toSeq.sortBy(_._2)//升序排序 value    a.toSeq.sortWith(_._1>_._1) //降序排序 key    a.toSeq.sortWith(_._2>_._2) //降序排序 value        //下面自定义按英文字母或数字排序    implicit  val KeyOrdering=new Ordering[String] {      override def compare(x: String, y: String): Int = {        x.compareTo(y)      }    }    println(a.toSeq.sorted)

(2)可变Map例子

特点:

api丰富与Java中Map基本类似

如果是var修饰,引用可变,支持读写

如果是val修饰,引用不可变,支持读写

def map3(): Unit ={  //不可变Map+var关键词修饰例子  var a:scala.collection.mutable.Map[String,Int]=scala.collection.mutable.Map("k1"->1,"k2"->2)//初始化构造函数  a += ("k3"->3)//添加元素  a += ("k4"->4)//添加元素  a += ("k1"->100)//已经存在添加元素会覆盖  a += ("k1"->100,"k9"->9)//添加多个元素  a -= ("k2","k1")//删除元素  a ++= List("CA" -> 23, "CO" -> 25)//追加集合  a --= List("AL", "AZ")//删除集合  a.retain((k,v)=> k=="k1")//只保留等于k1元素,其他的删除  a.put("put1",200)//put  a.remove("k2")//remove  a.clear()//清空  a("k3")=100//支持  println(a.contains("k6"))//是否包含某元素  println(a.size)//打印大小  println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值  a.foreach{case (e,i) => println(e,i)} //遍历打印1  for( (k,v)<-a ) println(k,v) //遍历打印2  println(a.isEmpty)//判断是否为空  a.keys.foreach(println)//只打印key  a.values.foreach(println)//只打印value  a=scala.collection.mutable.Map()//引用能变  println(a.size)  a.toSeq.sortBy(_._1)//排序 key  a.toSeq.sortBy(_._2)//排序 value  a.toSeq.sortWith(_._1>_._1) //降序排序 key  a.toSeq.sortWith(_._2>_._2) //降序排序 value        //下面自定义按英文字母或数字排序  implicit  val KeyOrdering=new Ordering[String] {    override def compare(x: String, y: String): Int = {      x.compareTo(y)    }  }  println(a.toSeq.sorted)}

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。

输入图片说明

转载于:https://my.oschina.net/u/1027043/blog/813311

你可能感兴趣的文章
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>