使用值从Scala中的地图检索关键字

时间:2016-12-12 18:40:46

标签: scala dictionary

我目前在scala中有一个Map,我需要检索与某个值匹配的键(或键!)。

我目前有学生和考试成绩的地图,需要能够找到我输入的学生得分的学生。

我的地图如下:

{{1}}

我如何搜索此地图以找到例如得分为71的学生然后返回该键?

提前致谢。

4 个答案:

答案 0 :(得分:2)

您可以使用以下代码来实现此目的

students.filter(_._2 == 71).map(_._1)

答案 1 :(得分:1)

首先,您应该使用val代替var,如下所示:val students = Map("Neil" -> 97, "Buzz" -> 71, "Michael" -> 95)

其次,您可能想要的方法称为find

像这样students.find(_._2 == 71).map(_._1)

基本上说,找到值(_._2 == 71)为71的第一个(键,值)对,然后抛出值.map(_._1)。它将被包装在一个Option中,因为可能有0个匹配。

那就是说,除非你有什么东西要确保价值永远不会出现一次,否则你可能会对filter的结果更满意。

答案 2 :(得分:1)

检查以下内容:

 val students = Map("N" -> 87, "B" -> 71, "M" -> 95, "X" -> 95)
 students.filter(_._2 == 95).keys
 res3: Iterable[String] = Set(M, X)

答案 3 :(得分:-1)

简洁明了

只需收集给定分数的学生姓名。

 student collect { case (name, 10) => name} headOption

使用Collect

val students = Map("Scala" -> 10, "Haskell" -> 20, "frege" -> 30)

student collect { case (name, 10) => name} headOption

上述代码收集得分为10的人的姓名,然后执行headOption以获得第一个人。如果没有匹配,上面的代码返回None。

Scala REPL输出

scala> val students = Map("Scala" -> 10, "Haskell" -> 20, "frege" -> 30)
students: scala.collection.immutable.Map[String,Int] = Map(Scala -> 10, Haskell -> 20, frege -> 30)

scala> students collect { case (name, 10) => name }
res3: scala.collection.immutable.Iterable[String] = List(Scala)

scala> students collect { case (name, 10000) => name }
res4: scala.collection.immutable.Iterable[String] = List()

scala> students collect { case (name, 10) => name } headOption
warning: there was one feature warning; re-run with -feature for details
res5: Option[String] = Some(Scala)