Scala系列:Map和Tuple


Map

構造Map

不可變:

val map = Map("sa" -> 1, "s" -> 2)
map("sa") = 3 // error

val emptyMap = new scala.collection.immutable.HashMap[String, Int]

可變:

val map2 = scala.collection.mutable.Map("sa" -> 2)
map2("sa") = 3

val emptyMap = new scala.collection.mutable.HashMap[String, Int]

注:->用來創建元組, "sa" -> 1即("sa", 1)

初始化完全可以 val map = Map(("sa", 1), ("s", 2))

獲取Map中的值:

如果map中不包含請求中使用的key值,則拋異常。NoSuchElementException

  map("sa") // 類似於java中的map.get("sa")

要檢查map中是否包含某個key,使用contains方法。

  val sa = if (map2.contains("sa3")) map2("sa3") else 0;

快捷的方式:

  val sa2 = map.getOrElse("sa2", 0)

一次得到是否包含key,並獲取值:

  val sa3 = map.get("sa3"); // Option類型,
  println(sa3.isEmpty)

更新Map中的值:

添加或更新:

  map("sa") = 3

添加或更新多個:

  map += ("aa" -> 4, "bb" -> 5)

移除某個key和對應的值:

  map -= "aa"

不可變的map也可以使用+和-操作,但是會生成新的map

  var map = Map("aa" -> 1)

  map = map + ("bb" -> 2) 

  map += ("cc" -> 2) 

  map -= "aa"

迭代map:

for ((k, v) <- map) {

  // TODO

}

所有key:

  map.keySet

所有值:

  map.values

反轉:

  map2 = for((k, v) <- map) yield (v, k)

已排序Map:

按key排序:

  SortedMap

按添加順序:

  LinkedHashMap

Map與Java互操作:

Java Properties轉為scala.collection.Map:

  import scala.collection.JavaConversions.propertiesAsScalaMap
  val prop: scala.collection.Map[String, String] = System.getProperties();

Java Map轉為scala.collection.mutable.Map[String, Int]:

  import scala.collection.JavaConversions.mapAsScalaMap
  val map: scala.collection.mutable.Map[String, Int] = new TreeMap[String, Int]

Scala Map轉為Java Map:

  import scala.collection.JavaConversions.mapAsJavaMap
  import java.awt.font.TextAttribute._
  var fs = Map(FAMILY -> "Serif", SIZE -> 12)
  var fonts = new Font(fs)

 

元組Tuple:

不同類型值的集合

  val tp = (1, "ss", 2.0)

訪問數值:

  tp._1

  tp._2

  tp._3

  下標從1開始

通過模式匹配獲取元組:

  val (first, second, third) = set

 

可以用於函數返回多個值的時候

拉鏈操作

val arrkey = Array(1, 3, 5)
val arrValue = Array("a", "b", "c")
val tupleArr = arrkey.zip(arrValue) // tupleArr為Array((1,a), (3,b), (5,c))
val map = tupleArr.toMap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM