Scala集合中的组合和排列是否稳定?

时间:2014-07-05 11:58:23

标签: scala scala-collections

我应该依赖Scala集合的相应方法生成的组合和排列的顺序吗?例如:

scala> Seq(1, 2, 3).combinations(2).foreach(println)
List(1, 2)
List(1, 3)
List(2, 3)

我能确定我的结果总是按照相同的精确顺序吗?

2 个答案:

答案 0 :(得分:2)

文档没有在订单上说明任何内容。它只是说:

  

遍历可能的n元素组合的迭代器   这个序列。

所以它不能保证。 理想情况下,您应始终在打印时获得订单,但库不能保证。所以它(悲观)安全不要相信它,而是做它排序,以便你总是得到相同的系列:

scala> import scala.math.Ordering.Implicits._
import scala.math.Ordering.Implicits._

scala> Seq(1,2,3).combinations(2).toList.sorted.foreach(println)
List(1, 2)
List(1, 3)
List(2, 3)

答案 1 :(得分:1)

combinations实现维护给定序列中元素的顺序。

除了处理输入以将重复的元素组合在一起外。

输出排序。

 scala> Seq(3,2,1).combinations(2).toList
 res1: List[Seq[Int]] = List(List(3, 2), List(3, 1), List(2, 1))

更新序列以将重复的元素保持在一起。例如:

 scala> Seq(2,1,3,1,2).combinations(2).toList
 res2: List[Seq[Int]] = List(List(2, 2), List(2, 1), List(2, 3), List(1, 1), List(1, 3))

在这种情况下,首先将seq转换为Seq(2,2,1,1,3):

 scala> Seq(2,2,1,1,3).combinations(2).toList
 res3: List[Seq[Int]] = List(List(2, 2), List(2, 1), List(2, 3), List(1, 1), List(1, 3))

 scala> res2 == res3
 res4: Boolean = true