scala(十八) Map

2022-04-20 15:20:27 浏览数 (1)

Map 集合

Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。

不可变Map

创建不可变Map

代码语言:javascript复制
val map=Map("a"->1,"b"->2,"c"->3)

或者

代码语言:javascript复制
val map=Map(("a",1),("b",2),("c",3))

更或者混合使用

代码语言:javascript复制
val map=Map(("a",1),"b"->2,"c"->3)

只有是二元元组就可以

支持的Api

代码语言:javascript复制
scala> map.
               contains       foldLeft             iterator       product             splitAt        toStream
               copyToArray    foldRight            keySet         reduce              stringPrefix   toString
  :            copyToBuffer   forall               keys           reduceLeft          sum            toTraversable
-              count          foreach              keysIterator   reduceLeftOption    tail           toVector
--             default        genericBuilder       last           reduceOption        tails          transform
/:             drop           get                  lastOption     reduceRight         take           transpose
:             dropRight      getOrElse            lift           reduceRightOption   takeRight      unzip
WithFilter     dropWhile      groupBy              map            repr                takeWhile      unzip3
addString      empty          grouped              mapValues      runWith             to             updated
aggregate      equals         hasDefiniteSize      max            sameElements        toArray        values
andThen        exists         hashCode             maxBy          scan                toBuffer       valuesIterator
apply          filter         head                 min            scanLeft            toIndexedSeq   view
applyOrElse    filterKeys     headOption           minBy          scanRight           toIterable     withDefault
canEqual       filterNot      init                 mkString       seq                 toIterator     withDefaultValue
collect        find           inits                nonEmpty       size                toList         withFilter
collectFirst   flatMap        isDefinedAt          orElse         slice               toMap          zip
companion      flatten        isEmpty              par            sliding             toSeq          zipAll
compose        fold           isTraversableAgain   partition      span                toSet

添加一个元素,返回一个新的map

代码语言:javascript复制
  @Test
  def map(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val newMap=map. ("d"->4)

    println(newMap)
  }
代码语言:javascript复制
Map(a -> 1, b -> 2, c -> 3, d -> 4)

添加一组map

代码语言:javascript复制
  @Test
  def map(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val newMap=map.  (List("d"->4,"e"->5,"f"->6))

    println(newMap)
  }
代码语言:javascript复制
Map(e -> 5, f -> 6, a -> 1, b -> 2, c -> 3, d -> 4)

: 添加一组map

代码语言:javascript复制
  @Test
  def map(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val newMap=map.  :(List("d"->4,"e"->5,"f"->6))

    println(newMap)
  }

结果和 一样

代码语言:javascript复制
Map(e -> 5, f -> 6, a -> 1, b -> 2, c -> 3, d -> 4)

- 根据key删除元素

代码语言:javascript复制
  @Test
  def map(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val newMap=map.-("a")

    println(newMap)
  }
代码语言:javascript复制
Map(b -> 2, c -> 3)

-- 根据一组key删除元素

代码语言:javascript复制
  @Test
  def map(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val newMap=map.--(List("a","c"))

    println(newMap)
  }
代码语言:javascript复制
Map(b -> 2)

map 获取元素,key不存在直接报错

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map("a")

    println(value)
  }
代码语言:javascript复制
1
代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map("d")

    println(value)
  }
代码语言:javascript复制
java.util.NoSuchElementException: key not found: d

get 获取元素,返回的是一个Option

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.get("a")

    println(value)
  }
代码语言:javascript复制
Some(1)

若要读取数字1,需要再调用一个get

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.get("a").get

    println(value)
  }
代码语言:javascript复制
`

若无数据返回Node

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.get("d")

    println(value)
  }
代码语言:javascript复制
None

getOrElse 若没数据,可以指定一个默认值

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.getOrElse("d",4)

    println(value)
  }
代码语言:javascript复制
4

updated 修改元素

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.updated("a",100)

    println(value)
  }
代码语言:javascript复制
Map(a -> 100, b -> 2, c -> 3)

keys 获取map中所有的key

代码语言:javascript复制
  @Test
  def map1(): Unit ={
    val map=Map(("a",1),"b"->2,"c"->3)

    val value=map.keys

    println(value)
  }
代码语言:javascript复制
Set(a, b, c)

0 人点赞