我在 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/