Scala 如何生成集合的成对组合,而忽略顺序?

Scala 如何生成集合的成对组合,而忽略顺序?,scala,functional-programming,Scala,Functional Programming,假设我有一个集合(使用集合): scala>valx=Set(1,2,3) x:scala.collection.immutable.Set[Int]=Set(1,2,3) 我可以通过以下代码获得所有成对组合: scala>for{ |a如果您不介意使用一组集合而不是一组元组,那么很容易: scala> val s3 = for { | a <- x | b <- x | if(a != b) | } yield ( Set(a,b))

假设我有一个集合(使用集合):

scala>valx=Set(1,2,3)
x:scala.collection.immutable.Set[Int]=Set(1,2,3)
我可以通过以下代码获得所有成对组合:

scala>for{

|a如果您不介意使用一组集合而不是一组元组,那么很容易:

scala> val s3 = for {
     | a <- x
     | b <- x
     | if(a != b)
     | } yield ( Set(a,b))
s3: scala.collection.immutable.Set[scala.collection.immutable.Set[Int]] = Set(Set(1, 2), Set(1, 3), Set(2, 3))
scala>val s3=for{

|Scala也有一个
combinations
方法,但它只在
Seq
上定义,而不是
Set
。因此,首先将您的集合转换为
Seq
,下面将为您提供一个
迭代器[Seq[Int]

x.toSeq.combinations(2)

如果您确实需要元组,请将
map{case Seq(a,b)=>(a,b)}
添加到上面。

然后您可以使用
map{set=>set.toList(0)->set.toList(1)}
或类似的方法映射到元组