在scala中使用find函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在scala中使用find函数相关的知识,希望对你有一定的参考价值。

我想在一个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
  }

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

答案

你使用与List相同的谓词,但要记住你是在(key,value)对上进行评估,而不仅仅是值(并且还得到一对!)。

简单的例子:

val default = (-1,"")
val value = "red"
colors.find(_._2==value).getOrElse(default)._1
另一答案

findMap的签名是find(p: ((A, B)) ⇒ Boolean): Option[(A, B)]。所以谓词需要一个Tuple2,必须返回Boolean。注意我将value更改为Int,因为colors中的键也是Int

scala> def keyForValue(map: Map[Int, String], value: Int) = {
     | colors.find({case (a,b) => a  == value})
     | }
keyForValue: (map: Map[Int,String], value: Int)Option[(Int, String)]

测试:

scala> keyForValue(colors, 1)
res0: Option[(Int, String)] = Some((1,red))

你也可以使用get

scala> colors.get(1)
res1: Option[String] = Some(red)
另一答案

您始终可以使用抽象解决方案并将键与其值交换,将其存储在新映射中,然后搜索新映射:

val colors = Map(1 -> "red", 2 -> "blue")
def keyForValue(map: Map[Int, String], value: String) = {
  val revMap = map map {_.swap}
  val key = revMap(value)
  key
}

第三行将键与值交换,并将其存储在revMap中。 (map map表示地图的名称,在本例中是参数,地图,然后是单词地图,然后{_.swap}实际上用它们的值交换键。

另一答案

我会避免将地图传递给find方法,而只是将地图的键传递给find方法。

这避免了处理Option [Int,String] - 而是Option [Int]。

// sample data
val colors = Map(1 -> "red", 2 -> "blue", 3 -> "yellow")

// function you need
def keyForValue(theMap: Map[Int, String], theValue: String): Int = {

    val someKey = theMap.keys.find( k => theMap(k) == theValue )
    someKey match {
        case Some(key) => {
            println(s"the map contains ${key} -> ${theValue}")
            return key
        }
        case None => {
            println(s"a key was not found for ${theValue}")
            return -1
        }
    }
}

这给出了:

scala> val result = keyForValue( colors, "blue" )
the map contains 2 -> blue
result: Int = 2

scala>

以上是关于在scala中使用find函数的主要内容,如果未能解决你的问题,请参考以下文章

scala编程——函数和闭包

Scala的面向对象与函数编程

在Scala项目中使用Spring Cloud

如何在 Scala 中使用 java.String.format?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?