【发布时间】:2018-11-18 11:07:39
【问题描述】:
假设我有元组列表:
val a = ListBuffer((1, 5), (6, 7))
更新: 假定 a 中的元素在每个 tuples2 中都是不同的,换句话说,它可以是 (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) 就不应该出现在结果元组 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, 6, 7)怎么样?是否正好有两个输入元组(为什么它们在一个列表中)? -
对不起。它已经在那里了。与 (6,7,1) 相同
-
输入元组中的元素都是不同的吗?
-
是的。 val a = ListBuffer((1, 5), (6, 7)) 中的元组和单个元素是不同的。 tuples3 和它们各自的元素也是不同的。
-
这需要为两个以上的元组或更长的元组工作吗?如果没有,您可以只写出四种组合(它们将是不同的,因为所有输入元素都是不同的)。
case Seq((a,b),(c,d)) => Seq((a,b,c),(a,b,d),(c,d,a),(c,d,b))