如果在scala中找不到密钥,如何使用密钥访问映射的值?

rjc*_*rjc 25 scala

假设我有

var mp = Map[String,String]()

.....

val n = mp("kk")
Run Code Online (Sandbox Code Playgroud)

如果键"kk"不存在,上面将抛出运行时错误.

我预计在密钥不存在的情况下,n将为null.如果key不存在,我希望n为null.

使用短代码示例在scala中处理这种情况的正确方法是什么?

Dav*_*ith 51

首先,您可能并不真正想要null,因为这几乎总是Scala中编码错误的迹象.你想要的是n是Option [String]类型,它表示该值是String或缺失.正确的方法是使用地图上的.get()方法

val n = mp.get("kk")
Run Code Online (Sandbox Code Playgroud)

如果你确实需要null(例如,对于Java库的互操作),你可以使用.getOrElse()

val n = mp.getOrElse("kk", null)
Run Code Online (Sandbox Code Playgroud)

  • mp.get("kk").或null :) (15认同)

Jea*_*let 20

试试这个:

val valueOpt = mp.get("kk")
Run Code Online (Sandbox Code Playgroud)

您的结果是类型Option[String],可以是NoneSome(actualValue).您可以使用模式匹配来查找:

valueOpt match {
  case Some(value) => println(value)
  case None => println("default")
}
Run Code Online (Sandbox Code Playgroud)

然而,更合适的方法是使用这些方法Option,例如:

println(valueOpt.getOrElse("default"))
Run Code Online (Sandbox Code Playgroud)

Option 那里寻找API文档.

编辑:请注意,Map它本身也直接定义了一个getOrElse方法,如Dave的回答所示.