上百度推廣 免費(fèi)做網(wǎng)站泰安百度公司代理商
和 Java 一樣,Scala 也有表示鍵值對(Key
-Value
)集合的 Map
數(shù)據(jù)結(jié)構(gòu)。同樣,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), ...)
下面例子,定義了一個(gè)球員與身價(jià)的 Map
,并獲取其中一名球員的身價(jià),如果獲取的 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 elided
2 可變 Map
使用 scala.collection.mutable.Map
類,可實(shí)現(xiàn)可變 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 = 1000000
3 Map 的基本操作
3.1 獲取值
獲取 Map
集合中的值可以使用以下兩種方式:
(1) 使用表達(dá)式 map(key)
,當(dāng) 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 = 500000
3.2 獲取所有 key
通過 keys
屬性,可以獲取 Map
集合中的 key
集合,這個(gè)集合為 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}身價(jià)為${price}")| }
夏蘭特身價(jià)為150000000
C朗身價(jià)為1500000
姆總身價(jià)為120000000
美斯身價(jià)為21000000
3.5 增加鍵值對并返回新的 Map
使用運(yùn)算符 +
可以在原 Map
對象基礎(chǔ)上增加新的鍵值對,并返回新的 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 刪除鍵值對
- 使用運(yùn)算符
-
可以從原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)