Как найти ключи hashmap, значения которых совпадают с хешетом

user3121051 спросил: 28 марта 2018 в 02:37 в: scala

У меня есть hashset, который имеет такие идентификаторы:

d1, d2, d3

и хэш-карта, которая имеет некоторые переменные в качестве ключей и идентификаторов как значения:

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

Что я хочу, найти ключи в hashmap, которые имеют все идентификаторы из набора в качестве значений и поместить их в другой набор.

Например, для данных выше, единственный ключ, который я бы поставил в новый набор c1. Это потому, что после этого я хочу сделать некоторые вычисления, и я хочу предотвратить любые Nans. Я думаю о создании функции, которая его вычисляет, но мне было интересно, был ли в scala более простой и быстрый способ, который я не знаю. Кто-нибудь знает?


2 ответа

Hayk Hakobyan ответил: 28 марта 2018 в 03:20

Hashmap не может содержать отдельные элементы с одинаковым идентификатором e.gMap ((c1, d2), (c2, d1), (c1, d1), (c1, d3)) - > станет картой ((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
Leo C ответил: 28 марта 2018 в 03:33

Вот один из подходов:

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)