cca*_*mpo 7 functional-programming scala
我们假设我有一个集合(让我们使用一个集合):
scala> val x = Set(1, 2, 3)
x: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码获得所有成对组合:
scala> for {
| a <- x
| b <- x
| if a != b
| } yield (a, b)
res9: scala.collection.immutable.Set[(Int, Int)] = Set((3,1), (3,2), (1,3), (2,3), (1,2), (2,1))
Run Code Online (Sandbox Code Playgroud)
问题是我只想获得忽略顺序的所有成对组合(因此组合(1, 2)相当于(2, 1)).所以我想回来Set((3, 1), (3, 2), (1, 2)).
不要假设集合的元素是整数.它们可以是任意类型.
有任何想法吗?
编辑:Python itertools.combinations执行我正在寻找的确切功能.我只想在Scala中使用惯用的方法:)
Lui*_*hys 13
Scala也有一个combinations方法,但它只是定义Seq,而不是Set.所以把你的设置变成Seq第一个,以下将给你一个Iterator[Seq[Int]]:
x.toSeq.combinations(2)
Run Code Online (Sandbox Code Playgroud)
如果你真的想要元组,请添加map {case Seq(a,b) => (a,b)}上面的内容.