笛卡尔加入Seq对抗自己?

时间:2018-06-06 07:00:36

标签: scala

给出

val numbers = Seq(1,2,3)
numbers.combinations(2).toList

给出

res2: List[Seq[Int]] = List(List(1, 2), List(1, 3), List(2, 3))

取代成对组合,获取订购功能的名称是什么?组合

e.g。

列表(1,2 1,3 2,1 2,3 3,1 3,2

2 个答案:

答案 0 :(得分:1)

其中一个简单的方法是使用for循环

scala> val numbers = Seq(1,2,3)
//numbers: Seq[Int] = List(1, 2, 3)

scala> for(num1 <- numbers; num2 <- numbers; if(num1 != num2)) yield (num1, num2)
//res0: Seq[(Int, Int)] = List((1,2), (1,3), (2,1), (2,3), (3,1), (3,2))

另一种方法是使用排列作为

scala> val numbers = Seq(1,2,3)
//numbers: Seq[Int] = List(1, 2, 3)

scala> numbers.permutations.map(list => (list(0), list(1))).toSet.toList
//res0: List[(Int, Int)] = List((3,1), (3,2), (1,3), (2,3), (1,2), (2,1))

答案 1 :(得分:1)

这将导致所有预期的对,但不会按照您要求的顺序。

numbers.combinations(2).flatMap(p => List(p,p.reverse)).toList