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)}
或类似的方法映射到元组