Scala Map(映射)

Posted: 2020-03-08  By  vilay  |  Views(15)

Map(映射)是一种可迭代的键值对(key/value)结构。

所有的值都可以通过键来获取。

Map 中的键都是唯一的。

1. 申明

object MapApp extends App {

//不可变map
//初始化
// val scoremap = Map("name"->"vilay","age"->"20")
// var scoremap1 = Map(("name","vilay"),("age","78"))
// scoremap1("name") = "zz" //会报错
// // println(scoremap)
// println(scoremap1)

//可变map
val scoremap2 = scala.collection.mutable.Map("name" -> "vilay", "age" -> 20)
scoremap2("name") = "cc"
println(scoremap2)  //HashMap(name -> cc, age -> 20)
}

2. 获取

val scoremap = Map("name"->"vilay","age"->30,"score"->100)
println(scoremap("name")) //vilay
println(scoremap.getOrElse("mobile","167676767")) //如果没有值获取默认的

3. 修改

可变 Map 允许进行新增、修改、删除 不可变不允许修改

val scoremap = scala.collection.mutable.Map("name"->"vilay","age"->30,"score"->100)

scoremap("name") = "zz"
println(scoremap) //修改值  HashMap(name -> zz, score -> 100, age -> 30)
scoremap("mobile") = "168383333"  //有就修改,没有就新增
println(scoremap)  //HashMap(mobile -> 168383333, name -> zz, score -> 100, age -> 30)
scoremap += ("tel"->"345555","email"->"23sd@dd.com")  //新增值
println(scoremap)  //HashMap(score -> 100, mobile -> 168383333, name -> zz, tel -> 345555, age -> 30, email -> 23sd@dd.com)
scoremap -= "name" //根据key进行删除
println(scoremap)   //HashMap(score -> 100, mobile -> 168383333, tel -> 345555, age -> 30, email -> 23sd@dd.com)

for (elem <- scoremap) {
    println(elem)  //(score,100) (mobile,168383333) (tel,345555) (age,30)(email,23sd@dd.com)
}

不可变 Map 不允许进行新增、修改、删除等操作,但是允许由不可变 Map 产生新的 Map,新的Map也是不可变的

val scoremap = Map("name"->"vilay","age"->40)

val newscoremap = scoremap + ("mobile"->"13344444")

println(newscoremap)

4. 遍历

val scoremap = Map("name"->"vilay","age"->40)

for (key <- scoremap.keys) {  //遍历key
    println(key)
}

for (value <- scoremap.values) {  //遍历 value
    println(value)
}

for ((key,value) <- scoremap) {  //遍历键值对
    println(key)
    println(value)
}

5. yield

val scoremap = Map("vilay"->40,"zz"->90)
val newscoremap = for((key,value) <- scoremap) yield (key,value*10)
println(newscoremap)  //值扩大10倍

val rerverse = for((key,value) <- scoremap) yield (value,key)
println(rerverse) //键值互换

6. 其它Map结构

在使用 Map 时候,如果不指定,默认使用的是 HashMap,如果想要使用 TreeMap 或者 LinkedHashMap,则需要显式的指定。

// 1.使用 TreeMap,按照键的字典序进行排序
    val scores01 = scala.collection.mutable.TreeMap("B" -> 20, "A" -> 10, "C" -> 30)
    for (elem <- scores01) {println(elem)}

    // 2.使用 LinkedHashMap,按照键值对的插入顺序进行排序
    val scores02 = scala.collection.mutable.LinkedHashMap("B" -> 20, "A" -> 10, "C" -> 30)
    for (elem <- scores02) {println(elem)}

7.Map 其它方法

scores.size  //获取长度
scores.isEmpty  //是否为空
scores.contains("A")  //是否含有A