我应该依赖Scala集合的相应方法生成的组合和排列的顺序吗?例如:
scala> Seq(1, 2, 3).combinations(2).foreach(println)
List(1, 2)
List(1, 3)
List(2, 3)
我能确定我的结果总是按照相同的精确顺序吗?
答案 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