【问题标题】:How do I take a list of keys that contains the value of the inputted key in the table in Scala如何获取包含 Scala 表中输入键值的键列表
【发布时间】:2019-02-14 20:27:38
【问题描述】:

鉴于以下不可变 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))
}

输入:“猫”

输出:List("CAT", "BAT", "HAT")

//"CAT" has value "ET"

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

【问题讨论】:

  • 更新了问题。这是我需要帮助的。
  • 更新了我的答案。您可能希望避免发布移动目标。
  • @Anonymous 也更新了我的答案。另外,我支持 jwvh,因为你不应该改变你的问题。

标签: scala dictionary


【解决方案1】:
table.keys.filter(table(_) == table("CAT"))

【讨论】:

  • 我得到的是一个集合,而不是一个列表。
  • .toList放在最后。
【解决方案2】:

其他选项是使用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)

如果 Map 没有任何与目标匹配的键,您将得到一个None

【讨论】:

    【解决方案3】:

    解决办法之一:

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

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2022-01-05
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多