在scala中对ArrayBuffer [A]进行排序?

Fel*_*lix 4 arrays sorting scala

我在类中使用Scala中的数组ArrayBuffer[Actor],其中Actor是一个实现Ordered[Actor]特征的类.如何在不编码的情况下对此数组进行排序?

我知道有一个被称为的对象Sorting,但它似乎没有用,因为ArrayBuffer没有实现/扩展正确的类.

我如何排序ArrayBuffer[A]类型数组?

Fla*_*gan 8

如果您使用的是Scala 2.8,则可以使用该类的sortWith方法,该方法ArrayBuffer[T]是从SeqLike特征继承而来的.

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

def ascendingSort[T <% Ordered[T]](xs: ArrayBuffer[T]) = xs.sortWith(_ < _)
Run Code Online (Sandbox Code Playgroud)

请注意,这不会改变实际情况ArrayBuffer,但会以正确的顺序创建一个新元素.

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

例如:

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

scala.util.Sorting.stableSort(a)
Run Code Online (Sandbox Code Playgroud)

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

来自Buffer班级的scaladoc :

缓冲区用于逐步创建元素序列

正如您在Actors 中使用它时,它可能用于某种actor队列 - 在这种情况下,您可能想要查看该Queue集合.

希望能帮助到你,

- Flaviu Cipcigan