地图集 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