在scala中使用find函数

Cor*_*ped 11 scala map

我想在一个Map中找到一个键,给出一个值.我正在使用'find'函数,因为它无法为它找出正确的谓词:

val colors = Map(1 -> "red", 2 -> "blue")
def keyForValue(map: Map[Int, String], value: String) = {
    val bool = map.find{map.foreach{map.values(i) == value}}
        bool.key
  }
Run Code Online (Sandbox Code Playgroud)

当我知道值时,如何迭代地图并找到密钥?

mik*_*łak 13

您可以使用同一种谓词与一List,但请记住,你在评估其(key,value),而不是只值(和获得一对回的!) .

简单的例子:

val default = (-1,"")
val value = "red"
colors.find(_._2==value).getOrElse(default)._1
Run Code Online (Sandbox Code Playgroud)

  • @Core_Dumped:我从接受中假设你可能已经想出来了,但以防万一:如果你运行代码,因为它实际上在答案中,你将获得密钥.这就是`.getOrElse(默认)._ 1`的用途.它给出了来自`find`的`Option`的值,给定一个默认值,并且`_1`你获得了结果对的第一个元素,这恰好是地图的关键. (3认同)