Map映射

90 阅读2分钟

(一) Map 的定义和创建

Map是一种存储键值对的数据结构,每个键在 Map 中是唯一的。在 Scala 中,我们可以使用多种方式创建 Map。

1.不可变 Map:val mapName: Map[KeyType, ValueType] = Map(key1 -> value1, key2 -> value2,...)

2.可变 Map(需导入scala.collection.mutable.Map):val mapName:

mutable.Map[KeyType, ValueType] = mutable.Map(key1 -> value2,...)

// 创建可变的Map,键 值 对
val scores = scala.collection.mutable.Map("alice" -> 90,"bob" -> 85)

println(scores)
// 创建不可变Map
val provinceInfo = scala.collection.immutable.Map("42" -> "湖北")

Map 的常用方法 - 添加元素

对于可变Map

这里我们使用 += 操作符向可变 Map 中添加了信息,可以看到新的键值对已经添加进去了。

// 创建可变的Map,键 值 对
val scores = scala.collection.mutable.Map("alice" -> 90,"bob" -> 85)
// 添加
scores += ("max" -> 100)

对于不可变Map

对于不可变 Map,由于其不可修改的特性,我们需要创建一个新的 Map 来包 含新的元素。
添加元素到不可变 Map 的格式(通过创建新 Map):val newMapName: Map[KeyType, ValueType] = oldMapName + (newKey ->newValue)

// 创建不可变Map
val provinceInfo = scala.collection.immutable.Map("42" -> "湖北")
// provinceInfo += ("14" -> "山西")
val newInfo = provinceInfo + ("14" -> "山西")
println(newInfo)

(三) Map 的常用方法 - 查询元素

我们可以使用 get 方法来查询 Map 中的值,或者直接Map(key)。

查询 Map 元素的格式(get 方法):

val valueOption: Option[ValueType] = mapName.get(key)

// 3. 查询。 查看bob的分数。rst是一个Option类型
val rst = scores.get("bob")
if(!rst.isEmpty){
  println("bob1没有成绩")
}else{
  println(rst.get)
}

(四)Map 的常用方法 - 删除元素(仅针对可变 Map)

对于可变 Map,我们可以使用 -= 操作符或者 remove 方法来删除键值对。
删除可变 Map 元素的格式(-= 操作符): mapName -= key
删除可变 Map 元素的格式(remove 方法): mapName.remove(key)

// 2. 删除alice。删除操作是根据key来做的
scores -= "alice"

(五)Map 的遍历

我们可以使用 for 循环或者 foreach 方法来遍历 Map。

使用 for 循环遍历 Map 的格式:

for ((key,value) <- scores){
  println(s"${key},${value}分")
}

使用 foreach 方法遍历 Map 的格式:

scores.foreach({
  case (key, value) => println(s"${key},${value}分")
})