Scala中的Map使用例子
阿新 • • 發佈:2018-12-25
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),在後臺留言諮詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。