如何在没有重复scala的情况下找到元组之间的所有可能组合
how to find all possible combinations between tuples without duplicates scala
假设我有元组列表:
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
如果单个元素是唯一的,正如您所评论的那样,那么您应该能够展平所有内容(非元组),获得所需的 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
假设我有元组列表:
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
如果单个元素是唯一的,正如您所评论的那样,那么您应该能够展平所有内容(非元组),获得所需的 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