在Scala中,有兩種Map,一個是immutable包下的Map,該Map中的內容不可變;另一個是mutable包下的Map,該Map中的內容可變。
//默認創建不可變map
scala> val scores=Map("zhangsan"->30,"lisi"->80,"wangwu"->70)
scores: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 30, lisi -> 80, wangwu -> 70)
//利用tuple創建map
scala> val scores=Map(("zhangsan",90),("lisi",80),("wangwu",70))
scores: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 90, lisi -> 80, wangwu -> 70)
//創建可變map
scala> val scores = scala.collection.mutable.Map(("zhangsan",90),("lisi",80),("wangwu",70))
scores: scala.collection.mutable.Map[String,Int] = Map(lisi -> 80, zhangsan -> 90, wangwu -> 70)
//利用key查詢map
scala> scores("zhangsan")
res1: Int = 90
//不存在的key會報錯
scala> scores("libai")
java.util.NoSuchElementException: key not found: libaiat scala.collection.MapLike$class.default(MapLike.scala:228)at scala.collection.AbstractMap.default(Map.scala:59)at scala.collection.mutable.HashMap.apply(HashMap.scala:65)... 32 elided
//判斷是否包含
scala> scores.contains("libai")
res3: Boolean = falsescala> scores.contains("lisi")
res4: Boolean = true
//get獲取的是Some類型
scala> scores.get("lisi")
res5: Option[Int] = Some(80)scala> scores.get("lisi").get
res6: Int = 80scala> scores.getOrElse("lisi")
<console>:13: error: not enough arguments for method getOrElse: (key: String, default: => B1)B1.
Unspecified value parameter default.scores.getOrElse("lisi")^
//帶默認值的查找,推薦這個
scala> scores.getOrElse("lisi",0)
res8: Int = 80
//libai沒有,采用默認值
scala> scores.getOrElse("libai",0)
res9: Int = 0scala> scores
res10: scala.collection.mutable.Map[String,Int] = Map(lisi -> 80, zhangsan -> 90, wangwu -> 70)
//添加元素
scala> scores("lisi")=105scala> scores
res12: scala.collection.mutable.Map[String,Int] = Map(lisi -> 105, zhangsan -> 90, wangwu -> 70)
//update也可以添加元素
scala> scores.update("lisl",107)scala> scores
res14: scala.collection.mutable.Map[String,Int] = Map(lisi -> 105, lisl -> 107, zhangsan -> 90, wangwu -> 70)
//也可以修改元素
scala> scores("libai")=99scala> scores
res16: scala.collection.mutable.Map[String,Int] = Map(libai -> 99, lisi -> 105, lisl -> 107, zhangsan -> 90, wangwu -> 70)
//+=追加元素
scala> scores+=("tom"->77)
res17: scores.type = Map(libai -> 99, lisi -> 105, lisl -> 107, zhangsan -> 90, tom -> 77, wangwu -> 70)
//+=追加多個元素
scala> scores+=("lifei"->87,"jerry"->98)
res18: scores.type = Map(libai -> 99, lisi -> 105, lisl -> 107, zhangsan -> 90, lifei -> 87, tom -> 77, jerry -> 98, wangwu -> 70)
//- 刪除元素
scala> scores-"lisi"
res19: scala.collection.mutable.Map[String,Int] = Map(libai -> 99, lisl -> 107, zhangsan -> 90, lifei -> 87, tom -> 77, jerry -> 98, wangwu -> 70)
//--刪除元素
scala> scores--List("zhangsan","lifei")
res20: scala.collection.mutable.Map[String,Int] = Map(lisi -> 105, libai -> 99, lisl -> 107, tom -> 77, jerry -> 98, wangwu -> 70)scala> scores-("lisi","libai")
res21: scala.collection.mutable.Map[String,Int] = Map(lisl -> 107, zhangsan -> 90, lifei -> 87, tom -> 77, jerry -> 98, wangwu -> 70)
//迭代key
scala> val res=scores.keySet
res: scala.collection.Set[String] = Set(libai, lisi, lisl, zhangsan, lifei, tom, jerry, wangwu)scala> for(ele <-res) print(ele+ " ")
libai lisi lisl zhangsan lifei tom jerry wangwu
//迭代 ,結果為tuple
scala> for(i <- scores) print(i+" ")
(libai,99) (lisi,105) (lisl,107) (zhangsan,90) (lifei,87) (tom,77) (jerry,98) (wangwu,70)
//另一種迭代方式
scala> for ((k,v)<-scores) print(k+" "+v+" ")
libai 99 lisi 105 lisl 107 zhangsan 90 lifei 87 tom 77 jerry 98 wangwu 70
scala> scores
res25: scala.collection.mutable.Map[String,Int] = Map(libai -> 99, lisi -> 105, lisl -> 107, zhangsan -> 90, lifei -> 87, tom -> 77, jerry -> 98, wangwu -> 70)
//put添加元素scala> scores.put("mm",9)
res26: Option[Int] = Nonescala> scores
res27: scala.collection.mutable.Map[String,Int] = Map(libai -> 99, lisi -> 105, lisl -> 107, zhangsan -> 90, lifei -> 87, mm -> 9, tom -> 77, jerry -> 98, wangwu -> 70)
//其他方法
scala> scores.
+ applyOrElse empty getOrElse keysIterator product scanRight to unzip
++ canEqual equals getOrElseUpdate last put seq toArray unzip3
++: clear exists groupBy lastOption reduce size toBuffer update
++= clone filter grouped lift reduceLeft sizeHint toIndexedSeq updated
+= collect filterKeys hasDefiniteSize map reduceLeftOption sizeHintBounded toIterable values
- collectFirst filterNot hashCode mapResult reduceOption slice toIterator valuesIterator
-- companion find head mapValues reduceRight sliding toList view
--= compose flatMap headOption max reduceRightOption span toMap withDefault
-= contains flatten init maxBy remove splitAt toSeq withDefaultValue
/: copyToArray fold inits min repr stringPrefix toSet withFilter
:\ copyToBuffer foldLeft isDefinedAt minBy result sum toStream zip
WithFilter count foldRight isEmpty mkString retain tail toString zipAll
addString default forall isTraversableAgain nonEmpty runWith tails toTraversable zipWithIndex
aggregate drop foreach iterator orElse sameElements take toVector
andThen dropRight genericBuilder keySet par scan takeRight transform
apply dropWhile get keys partition scanLeft takeWhile transpose
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态