给出以下不可变的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
答案 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