как найти все возможные комбинации между кортежами без дубликатов скала - PullRequest
0 голосов
/ 18 ноября 2018

предположим, у меня есть список кортежей:

val a = ListBuffer((1, 5), (6, 7))

Обновление: Предполагается, что элементы в a различаются внутри каждого из кортежей2, другими словами, это может быть, например,(1,4) (1,5), но не (1,1) (2,2).

Я хочу получить результаты всех комбинаций ListBuffer a между этими двумя кортежами, но без дублирования.Результат будет выглядеть так:

ListBuffer[(1,5,6), (1,5,7), (6,7,1), (6,7,5)]

Обновление: элементы в результате tuple3 также различны.кортежи сами по себе также различны, то есть, если (6,7,1) присутствует, то (1,7,6) не должно быть в результате tuple3.

Если, например, val a = ListBuffer((1, 4), (1, 5)), то результат вывода должен быть ListBuffer[(1,4,5)], при котором (1,4,1) and (1,5,1) отбрасывается

Как я могу это сделать в Scala?

Примечание: Я только что привел пример.Обычно val a имеет десятки scala.Tuple2

1 Ответ

0 голосов
/ 18 ноября 2018

Если отдельные элементы уникальны, как вы прокомментировали, тогда вы должны иметь возможность сгладить все (без кортежа), получить желаемый combinations() и повторить кортеж.

обновлен

val a = collection.mutable.ListBuffer((1, 4), (1, 5))
a.flatMap(t => Seq(t._1, t._2))     //un-tuple
  .distinct                         //no duplicates
  .combinations(3)                  //unique sets of 3
  .map{case Seq(x,y,z) => (x,y,z)}  //re-tuple
  .toList                           //if you don't want an iterator
...