Scala中的Map使用例子

Map結構是一種很是常見的結構,在各類程序語言都有對應的api,因爲Spark的底層語言是Scala,因此有必要來了解下Scala中的Map使用方法。api

(1)不可變Map

特色:微信

api不太豐富ide

若是是var修飾,引用可變,支持讀寫函數

若是是val修飾,引用不可變,只能寫入一次值,其後只讀scala

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例子

特色:code

api豐富與Java中Map基本相似排序

若是是var修飾,引用可變,支持讀寫圖片

若是是val修飾,引用不可變,支持讀寫ci

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),在後臺留言諮詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。rem

輸入圖片說明

相關文章
相關標籤/搜索