我有一个有以下ID的哈希集:
d1,d2,d3
和一个散列图,其中包含一些变量作为键和id作为值:
(c1,d2),(c2,d1),(c1,d1),(c1,d3)
我想要的是找到散列映射中的键,它将集合中的所有ID作为值并将它们放在另一个集合中。
例如,对于上面的数据,我将放入新集合的唯一键是c1。那是因为之后我想做一些计算,我想阻止任何Nans。我正在考虑创建一个计算它的函数,但我想知道scala中是否有一种更简单,最快速的方法,我不知道。有没有人有任何线索?
答案 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)