地图集 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)
常见的操作
在地图上的迭代发生的操作(map
,find
,forEach
等)中,集合的元素是 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