假设我有元组列表:
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
答案 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