我在 Scala 中有一个类 ArrayBuffer[Actor] 的数组,其中 Actor 是一个实现 Ordered[Actor] 特性的类。如何在不手动编码的情况下对这个数组进行排序?

我知道有一个名为 Sorting 的对象,但它似乎不起作用,因为 ArrayBuffer 没有实现/扩展正确的类。

如何对 ArrayBuffer[A] 类型数组进行排序?

最佳答案

如果您使用的是 Scala 2.8,则可以使用 sortWith 类的 ArrayBuffer[T] 方法,该方法继承自 SeqLike trait。

以下代码片段按升序对 ArrayBuffer[T] 对象进行排序:

def ascendingSort[T <% Ordered[T]](xs: ArrayBuffer[T]) = xs.sortWith(_ < _)

请注意,这不会改变实际的 ArrayBuffer ,而是创建一个具有正确顺序的元素的新代码。

如果您使用的是 Scala 2.7,则可以使用 stableSort 对象的 Sorting 方法。这需要 ArrayBuffer 的元素并生成按正确顺序排序的元素数组(由闭包作为参数给出,默认为升序)。

例如:
val a = new scala.collection.mutable.ArrayBuffer[Int]()
a += 5
a += 2
a += 3

scala.util.Sorting.stableSort(a)

重要的问题是你想用 ArrayBuffer 做什么。通常,Buffer 在不同算法内部使用,以提高中间结果的性能。如果您为此使用它,请查看在算法结束时对要返回的集合进行排序的方法。 Sorting 对象已经提供了一种将 ArrayBuffer 转换为排序后的 Array 的方法。

来自 Buffer 类的 scaladoc:



当您将它与 Actor s 一起使用时,它可能用于某种角色队列 - 在这种情况下,您可能需要查看 Queue 集合。

希望能帮助到你,

——弗拉维乌·西皮根

关于arrays - 在 Scala 中对 ArrayBuffer[A] 进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1952129/

10-13 07:32