100个免费推广网站下载,罗湖商城网站建设哪家好,莱芜在线论坛话题莱芜都市网,郑州app开发外包和 Java 一样#xff0c;Scala 也有表示键值对#xff08;Key-Value#xff09;集合的 Map 数据结构。同样#xff0c;Map 也分不可变和可变#xff0c;不可变需要使用类 scala.collection.mutable.Map。
1 不可变 Map
可以使用以下语法定义不可变 Map 对象
val/var ma…和 Java 一样Scala 也有表示键值对Key-Value集合的 Map 数据结构。同样Map 也分不可变和可变不可变需要使用类 scala.collection.mutable.Map。
1 不可变 Map
可以使用以下语法定义不可变 Map 对象
val/var map Map(key1 - value1, key2 - value2, key3 - value3, ...) // 推荐可读性好
val/var map Map((key1, value1), (key2, value2), (key3, value3), ...)下面例子定义了一个球员与身价的 Map并获取其中一名球员的身价如果获取的 key 不存在则会抛出 NoSuchElementException
scala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: Map[String, Int] Map(C朗 - 1500000, 美斯 - 21000000, 夏兰特 - 150000000, 姆总 - 120000000)scala map(美斯)
val res6: Int 21000000scala map(武磊)
java.util.NoSuchElementException: key not found: 武磊at scala.collection.immutable.Map$Map4.apply(Map.scala:515)... 35 elided2 可变 Map
使用 scala.collection.mutable.Map 类可实现可变 Map 集合语法跟不可变 Map 一致:
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map(夏兰特)
val res8: Int 150000000scala map(武磊)
java.util.NoSuchElementException: key not found: 武磊at scala.collection.MapOps.default(Map.scala:274)at scala.collection.MapOps.default$(Map.scala:273)at scala.collection.AbstractMap.default(Map.scala:405)at scala.collection.mutable.HashMap.apply(HashMap.scala:425)... 35 elidedscala map(武磊) 1000000scala map(武磊)
val res10: Int 10000003 Map 的基本操作
3.1 获取值
获取 Map 集合中的值可以使用以下两种方式
(1) 使用表达式 map(key)当 key 不存在会抛出 NoSuchElementException (2) 使用 getOrElse(key, defaultValue) 方法
例如
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map.getOrElse(武磊, 500000)
val res11: Int 5000003.2 获取所有 key
通过 keys 属性可以获取 Map 集合中的 key 集合这个集合为 Set 类型
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map.keys
val res12: Iterable[String] Set(夏兰特, C朗, 姆总, 美斯)3.3 获取所有 value
通过 values 属性可以获取 Map 集合中的 value 集合:
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map.values
val res13: Iterable[Int] Iterable(150000000, 1500000, 120000000, 21000000)3.4 遍历 Map 对象
使用 for 可以遍历 Map 对象
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala for((player, price) - map) {| println(s${player}身价为${price})| }
夏兰特身价为150000000
C朗身价为1500000
姆总身价为120000000
美斯身价为210000003.5 增加键值对并返回新的 Map
使用运算符 可以在原 Map 对象基础上增加新的键值对并返回新的 Map 对象。
下面的例子使用 添加了新的 (key,value)并返回新的 Map 对象原来的 Map 对象不变
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala val map1 map (韦世豪 - 600000)
val map1: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美斯 - 21000000, 韦世豪 - 600000)scala map
val res16: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美斯 - 21000000)scala map1
val res17: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美斯 - 21000000, 韦世豪 - 600000)3.6 刪除键值对
使用运算符 - 可以从原 Map 对象删除指定的键值对并返回新的 Map 对象原来的 Map 对象不变。
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map - 姆总
val res18: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 美斯 - 21000000)scala map
val res19: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美斯 - 21000000)如果想从 Map 对象删除指定的键值对则可使用 remove 方法
scala import scala.collection.mutable.Mapscala val map Map(C朗-1500000, 美斯-21000000, 夏兰特-150000000, 姆总-120000000)
val map: scala.collection.mutable.Map[String, Int] HashMap(夏兰特 - 150000000, C朗 - 1500000, 姆总 - 120000000, 美 斯 - 21000000)scala map.remove(夏兰特)
val res22: Option[Int] Some(150000000)scala map
val res23: scala.collection.mutable.Map[String, Int] HashMap(C朗 - 1500000, 姆总 - 120000000, 美斯 - 21000000)