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

时间:2011-07-02 15:13:32

标签: scala

假设我有

var mp = Map[String,String]()

.....

val n = mp("kk")

如果密钥“kk”不存在,上面将抛出运行时错误。

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

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

3 个答案:

答案 0 :(得分:48)

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

val n = mp.get("kk")

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

val n = mp.getOrElse("kk", null)

答案 1 :(得分:20)

试试这个:

val valueOpt = mp.get("kk")

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

valueOpt match {
  case Some(value) => println(value)
  case None => println("default")
}

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

println(valueOpt.getOrElse("default"))

查找Option there的API文档。

修改:请注意,Map本身也直接定义了getOrElse方法,如Dave的回答所示。

答案 2 :(得分:0)

val conversionRatios:mutable.Map[String, Double] = mutable.Map[String, Double](
    "USD" -> 2.0,
    "CNY" -> 3.0
  )

val currentRate = conversionRatios.apply(key) // it will return you value or NoSuchElementException will be thrown