地圖集 Cheatsheet

請注意,這涉及建立 Map 型別的集合,這與 map 方法不同。

地圖創作

Map[String, Int]() 
val m1: Map[String, Int] = Map()
val m2: String Map Int = Map()

對於大多數操作,對映可以被認為是 tuples 的集合,其中第一個元素是鍵,第二個元素是值。

val l = List(("a", 1), ("b", 2), ("c", 3))
val m = l.toMap                               // Map(a -> 1, b -> 2, c -> 3)

獲取元素

val m = Map("a" -> 1, "b" -> 2, "c" -> 3)

m.get("a")  // Some(1)
m.get("d")  // None
m("a")      // 1
m("d")      // java.util.NoSuchElementException: key not found: d

m.keys      // Set(a, b, c)
m.values    // MapLike(1, 2, 3)

新增元素

Map("a" -> 1, "b" -> 2) + ("c" -> 3)               // Map(a -> 1, b -> 2, c -> 3)
Map("a" -> 1, "b" -> 2) + ("a" -> 3)               // Map(a -> 3, b -> 2)
Map("a" -> 1, "b" -> 2) ++ Map("b" -> 3, "c" -> 4) // Map(a -> 1, b -> 3, c -> 4)

常見的操作

在地圖上的迭代發生的操作(mapfindforEach 等)中,集合的元素是 tuples。函式引數可以使用元組訪問器(_1_2),也可以使用帶有 case 塊的部分函式:

m.find(_._1 == "a")  // Some((a,1))
m.map {
  case (key, value) => (value, key)
}                    // Map(1 -> a, 2 -> b, 3 -> c)
m.filter(_._2 == 2)  // Map(b -> 2)
m.foldLeft(0){
  case (acc, (key, value: Int)) => acc + value
}                    // 6