如何在没有重复scala的元组之间找到所有可能的组合

时间:2018-11-17 23:43:33

标签: scala scala-collections

假设我有元组列表:

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)]
结果元组3中的

更新元素也是不同的。它们自身的元组也不同,意味着只要存在(6,7,1),那么(1,7,6)就不应出现在结果元组3中。

如果例如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 :(得分:3)

如果您已经评论过,如果各个元素都是唯一的,那么您应该能够展平所有内容(取消元组),获得所需的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