📅  最后修改于: 2023-12-03 15:19:58.226000             🧑  作者: Mango
在Scala中,映射值是一种重要的数据类型,它允许将键映射到值。Scala标准库提供了两种映射值类型:不可变的Map
和可变的mutable.Map
。不可变的Map
是线程安全的,一旦创建就不能更改。可变的Map
则是线程不安全的,可以在运行时添加、修改和删除元素。
不可变的Map
可以通过Map
伴生对象的apply
方法或Map
构造函数进行创建。
// 使用apply方法创建Map
val map1 = Map("key1" -> "value1", "key2" -> "value2")
// 使用Map构造函数创建Map
val map2 = Map(("key1", "value1"), ("key2", "value2"))
可变的Map
需要使用mutable.Map
类创建。可以通过mutable.Map
伴生对象的apply
方法或new
关键字创建mutable.Map
。
// 使用apply方法创建mutable.Map
val mutableMap1 = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 使用new关键字创建mutable.Map
val mutableMap2 = new mutable.HashMap[String, String]()
可以使用get
方法或apply
方法获取映射值中的值。get
方法返回一个Option
对象,如果键不存在则返回None
,否则返回Some
包装器对象。
val map = Map("key1" -> "value1", "key2" -> "value2")
val mutableMap = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 使用get方法获取值
val value1 = map.get("key1") // Some("value1")
val value3 = map.get("key3") // None
// 使用apply方法获取值
val value2 = mutableMap("key2")
通过+
操作符或+=
方法可以向映射值中添加一个元素。操作返回一个新的映射值对象。
val map = Map("key1" -> "value1", "key2" -> "value2")
val mutableMap = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 使用+操作符添加元素
val newMap1 = map + ("key3" -> "value3")
val newMutableMap1 = mutableMap + ("key3" -> "value3")
// 使用+=方法添加元素
mutableMap += ("key3" -> "value3")
通过+
操作符或+=
方法也可以修改映射值中的元素。如果键已经存在,则会替换掉原有的值。
val map = Map("key1" -> "value1", "key2" -> "value2")
val mutableMap = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 使用+操作符修改元素
val newMap1 = map + ("key2" -> "new value")
val newMutableMap1 = mutableMap + ("key2" -> "new value")
// 使用+=方法修改元素
mutableMap += ("key2" -> "new value")
通过-
操作符或`-=``方法可以从映射值中删除一个元素。
val map = Map("key1" -> "value1", "key2" -> "value2")
val mutableMap = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 使用-操作符删除元素
val newMap1 = map - "key2"
val newMutableMap1 = mutableMap - "key2"
// 使用-=方法删除元素
mutableMap -= "key2"
可以使用foreach
方法遍历映射值中的所有键值对。foreach
方法接受一个函数作为参数,这个函数接受一个键值对元组作为参数。
val map = Map("key1" -> "value1", "key2" -> "value2")
val mutableMap = mutable.Map("key1" -> "value1", "key2" -> "value2")
// 遍历不可变的Map
map.foreach { case (key, value) =>
println(s"$key -> $value")
}
// 遍历可变的Map
mutableMap.foreach { case (key, value) =>
println(s"$key -> $value")
}