Scala 集合
MAP
初始化
定义 Map 时,需要为键值对定义类型
val t1="a"->1
val t1: (String, Int) = (a,1)
scala> val t2=("b",2)
val t2: (String, Int) = (b,2)
scala> val t3=Tuple2("c",3)
val t3: (String, Int) = (c,3)
scala> val m=Map(t1,t2,t3)
val m: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)
查找值
- Get
Get 方法返回Option对象,如果见存在于Map对象中,返回Some(value) 值,否则返回None
scala> m.get("a")
val res1: Option[Int] = Some(1)
scala> m.get("z")
val res2: Option[Int] = None
- getorElse
提供一个默认值
scala> m.getOrElse("z",100)
val res5: Int = 100
scala> m.getOrElse("a",100)
val res6: Int = 1
- Apply
Apply 方法也提供建做参数,返回键对应的值,类似于getOrElse,但是它不需要主动提供默认值
scala> m.apply("a")
val res7: Int = 1
//处理键不存在的情况,默认default
scala> m.apply("z")
java.util.NoSuchElementException: key not found: z
at scala.collection.immutable.Map$Map2.apply(Map.scala:298)
... 32 elided
- withDefault
提供了一个默认方法 - withDefaultValue
提供了一个默认值
scala> val m2= m.withDefaultValue(-1)
val m2: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 1)
scala> m2.apply("z")
val res20: Int = -1
scala> val m3=m.withDefault(_.charAt(0)-'a')
val m3: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 1)
- getOrElseUpdate
注意
替换default 方法,不会影响get、contains、iterator、keys原有的逻辑。例如,get不存在的键依然返回None
包含某个键
- Contains
- isDefinedAt
scala> m.contains("a")
val res34: Boolean = true
scala> m.contains("z")
val res35: Boolean = false
scala> m.isDefinedAt("a")
val res38: Boolean = true
scala> m.isDefinedAt("z")
val res39: Boolean = false
增加新的键值对
-
- 增加一个或者多个键值对,返回新的Map对象
scala> m+("d"->4)
val res42: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 1, d -> 4)
scala> m+("e"->5,"f"->6)
^
warning: method + in trait MapOps is deprecated (since 2.13.0): Use ++ with an explicit collection argument instead of + with varargs
val res46: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 1, e -> 5, f -> 6)
- ++ 增加键值对集合,实现批量增加, 如果键已经存在于Map对象中,等同于更新操作
scala> m++Seq("d"->4,"h"->8)
val res43: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 1, d -> 4, h -> 8)
- ++= 可变Map
- += 可变Map
- Put 可变Map
scala> m+=("d"->4)
^
error: value += is not a member of scala.collection.immutable.Map[String,Int]
Expression does not convert to assignment because receiver is not assignable.
删除键
-
--
-=
--=
remove
转换