斯卡拉地图中有没有发现



在 Scala Map 中,如何获取 Map 中具有相同值的所有键?

例如,在我的地图中,我有 3 个键,值为 27

例如:

large -> 27
indispensable -> 27
most -> 27 

我试过了

val adj1value = htAdjId.find(_._2 == value1).getOrElse(default)._1

但这只给了我第一个键"大"(就像 find 的定义一样(。我搜索了很多,但我找不到"查找所有"功能。它存在于 Scala 中吗?如果没有,有人可以建议我如何解决这个问题吗?

您可以使用 keys 过滤集合并提取所有键:

val map = Map("h" -> 27, "b" -> 2, "c" -> 27)
map.filter { case (key, value) => value == 27 }.keys

收益 率

res0: Iterable[String] = Set(h, c)

虽然我认为,如果你每次都需要迭代整个Map,也许它不是正确的数据结构,也许一个List[(String, Int)]就足够了,并节省了使用Map产生的开销。

您可以将映射视为可迭代[K,V],然后按这样的值分组。

@ Map(
    "large" -> 27,
    "indispensable" -> 27,
    "most" -> 27
).groupBy(_._2).mapValues(_.keys)
res4: Map[Int, Iterable[String]] = Map(27 -> Set(
  "large",
  "indispensable",
  "most"))

[由我的一个离线朋友回答] 哈希图通常被构建为仅有效地进行正向查找。除非您知道哈希图中使用的底层数据结构支持此功能,否则您可能不想执行此"反向查找",因为它效率非常低

如果要从

两个方向访问数据,请考虑从一开始就将数据放入双向地图或"双向地图"中。或者,使用两个哈希映射:一个在常规方向上,一个倒置(值成为键,键成为值(或完全使用不同的数据结构。

即,如果地图很大,或者你要做很多这种检查,两张地图是个好主意。 否则尝试过滤器而不是查找

相关内容

最新更新