如何在Scala的表中获取包含输入键值的键列表

时间:2019-02-14 20:27:38

标签: scala dictionary

给出以下不可变的Map(“ CAT”->“ ET”,“ BAT”->“ ET”,“ DIAMOND”->“ AHND”,“ HAT”->“ ET”),我该怎么办在Scala表中包含输入键值的键列表?如果输入的键不在表中,则返回一个空列表。

我的尝试:

val word = "CAT"
val table = Map("CAT" -> "ET", "BAT" -> "ET", "DIAMOND" -> "AHND", 
"HAT" -> "ET")
if (table.get(find).isDefined) {
    List(table.get(find))
}

输入:“ CAT”

输出:List(“ CAT”,“ BAT”,“ HAT”)

//"CAT" has value "ET"

//Return list of keys that contains the value of the inputted key in the table

3 个答案:

答案 0 :(得分:2)

Rotations/Replacements

答案 1 :(得分:1)

其他选择是使用collect一步执行过滤器和地图。

val target = "CAT"
val table = Map(
  "CAT" -> "ET", 
  "BAT" -> "ET",
  "DIAMOND" -> "AHND",
  "HAT" -> "ET"
)

table.get(target).map { find =>
  table.collect { case(key, value) if (value == find) => key }
}
// res0: Option[scala.collection.immutable.Iterable[String]] = List(CAT, BAT, HAT)

如果地图没有与目标匹配的键,您将获得一个None

答案 2 :(得分:0)

解决方案之一:

table.filter {case (_, v) => v.contains(find)}.keys.toList