【问题标题】:How to find hashmap keys whose values are the same with a hashset如何找到值与哈希集相同的哈希映射键
【发布时间】:2018-04-21 16:17:01
【问题描述】:

我有一个哈希集,其 id 如下:

d1、d2、d3

还有一个 hashmap,其中有一些变量作为键,id 作为值:

(c1,d2), (c2,d1), (c1,d1), (c1,d3)

我想要的是在 hashmap 中找到将集合中的所有 id 作为值的键,并将它们放在另一个集合中。

例如,对于上面的数据,我将放入新集合中的唯一键是 c1。那是因为之后我想做一些计算并且我想阻止任何 Nans。我正在考虑创建一个计算它的函数,但我想知道在 scala 中是否有一种我不知道的更简单和最快的方法。有人知道吗?

【问题讨论】:

  • 为什么HashMap中有重复键?

标签: scala hashmap hashset


【解决方案1】:

Hashmap 不能包含具有相同 id 的不同元素,例如 Map((c1,d2), (c2,d1), (c1,d1), (c1,d3)) -> 会变成 M​​ap((c2,d1), (c1,d3))。

val set = Set("d1", "d2", "d3")
val arr = Array(("c1", "d2"), ("c2", "d1"), ("c1", "d1"), ("c1", "d3"))

arr.groupBy(_._1)
  .mapValues(_.map(_._2))
  .filter(_._2.sorted.sameElements(set)).keys

【讨论】:

    【解决方案2】:

    这是一种方法:

    val s = Set("d1", "d2", "d3")
    
    val l = List(("c1", "d2"), ("c2", "d1"), ("c1", "d1"), ("c1", "d3"))
    
    l.groupBy(_._1).mapValues(_.map(_._2).toSet).
      filter{ case (_, v) => (v intersect s) == s }.
      keys.toList
    // res2: List[String] = List(c1)
    

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多