scala菜鳥教程,scala Map入門到熟悉

 2023-12-06 阅读 18 评论 0

摘要:在Scala中,有兩種Map,一個是immutable包下的Map,該Map中的內容不可變;另一個是mutable包下的Map,該Map中的內容可變。 //默認創建不可變map scala> val scores=Map("zhangsan"->30,"lisi"->80,"wangwu&#

在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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/189375.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息