scala Map入门到熟悉

在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: libai
  at 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 = false

scala> scores.contains("lisi")
res4: Boolean = true
//get获取的是Some类型
scala> scores.get("lisi")
res5: Option[Int] = Some(80)

scala> scores.get("lisi").get
res6: Int = 80

scala> 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 = 0

scala> scores
res10: scala.collection.mutable.Map[String,Int] = Map(lisi -> 80, zhangsan -> 90, wangwu -> 70)
//添加元素
scala> scores("lisi")=105

scala> 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")=99

scala> 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] = None

scala> 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值