如何查找其值与hashset相同的hashmap键

时间:2018-04-21 16:17:02

标签: scala hashmap hashset

我有一个有以下ID的哈希集:

  

d1,d2,d3

和一个散列图,其中包含一些变量作为键和id作为值:

  

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

我想要的是找到散列映射中的键,它将集合中的所有ID作为值并将它们放在另一个集合中。

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

2 个答案:

答案 0 :(得分:0)

Hashmap不能包含具有相同id的不同元素,例如 映射((c1,d2),(c2,d1),(c1,d1),(c1,d3)) - >将成为Map((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

答案 1 :(得分:0)

这是一种方法:

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)