Создайте карту из элементов того же набора на основе условия Scala - PullRequest
2 голосов
/ 20 июня 2020

У меня есть Hashset следующей формы, он может вырасти большими:

var hs = HashSet(("fox", "name"),
    ("animal", "type"),
    ("gender", "type"),
    ("x", "test"),
    ("x", "nottest"),
    ("z", "test"),
    ("z", "nottest"))

Как лучше всего получить из него карту следующего вида:

HashMap (("x", "test")-> ("x", "nottest"),("z", "test") ->("z", "nottest"))

т.е. отображение кортежей из одного набора, где они имеют один и тот же первый элемент, а второй элемент имеет префикс «не».

1 Ответ

2 голосов
/ 20 июня 2020

Вы можете создать все возможные пары и отфильтровать те, которых нет в исходном наборе:

hs.map { case(k, v) => (k, v) -> (k, "not" + v) }
  .filter { case(pos, neg) => hs.contains(neg) }
  .toMap

Изменить:

Если набор становится очень большим, тогда мы можно легко изменить порядок - сначала проверьте и отфильтруйте только пары с отрицаниями, затем сопоставьте:

hs.filter { case(k, v) => hs((k, "not" + v)) }
  .map { case(k, v) => (k, v) -> (k, "not" + v) }
  .toMap
...