Map
Scala映射(Map
)是一组键/值对的对象。 任何值都可以根据键来进行检索。键在映射中是唯一的,但值不一定是唯一的。映射也称为哈希表。映射有两种,不可变的和可变的。可变对象和不可变对象之间的区别在于,当对象不可变时,对象本身无法更改。
默认情况下,Scala使用不可变映射(Map
)。如果要使用可变集合(Set
),则必须明确导入scala.collection.mutable.Map
类。如果想同时使用可变的和不可变映射(Map
),那么可以继续引用不可变映射(Map
),但是可以将mutable
集合引用mutable.Map
。
1, 创建映射
def createMap(): Map[String, String] = { // 创建空map var A:Map[Char, Int] = Map() var colors = Map("red" -> "红", "blue" -> "蓝") // 向集合中添加元素 colors += ("yellow" -> "黄") colors }
2, map的基本操作
def optMap(mulMap: Map[String, String]): Unit = { // 返回所有的键 println(mulMap.keys) // 返回所有的值 println(mulMap.values) // 检查是否为空 println(mulMap.isEmpty) // map中是否存在值 println(mulMap.contains("blue")) }
3, 链接映射
def main(args: Array[String]) { val colors1 = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F") val colors2 = Map("blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000") // use two or more Maps with ++ as operator var colors = colors1 ++ colors2 println( "colors1 ++ colors2 : " + colors ) // use two maps with ++ as method colors = colors1.++(colors2) println( "colors1.++(colors2)) : " + colors ) }
4, 取值:
def main(args: Array[String]) { val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F") colors.keys.foreach{ i => print( "Key = " + i ) println(" Value = " + colors(i) )} }
选项 (Option) 操作
Scala Option[T]
是由给定类型的零或一个元素的一种容器。Option[T]
可以是 Some [T]
或None
对象,它代表缺少的值。 例如,如果已找到与给定键对应的值,则Scala的Map的get
方法会生成Some(value)
,如果在Map
中未定义给定的键,则将返回None
。
Option
类型在Scala程序中经常使用,可以将其与Java中可用的null
值进行比较,表示null
值。 例如,java.util.HashMap
的get
方法返回存储在HashMap
中的值,如果没有找到值,则返回null
。
// 如果找到记录,该方法将返回Some [Person],如果没有找到该记录,则返回Nonedef findPerson(key: Int): Option(Person) {}
样例
def main(args: Array[String]) { val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo") println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) ) println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) ) } def show(x: Option[String]) = x match { case Some(s) => s case None => "?" }
getOrElse() 方法, 没有则返回默认值
def main(args: Array[String]) { val a:Option[Int] = Some(5) val b:Option[Int] = None println("a.getOrElse(0): " + a.getOrElse(0) ) println("b.getOrElse(10): " + b.getOrElse(10) ) }
可变包结构图:
不可变包结构图