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