Fel*_*lix 4 arrays sorting scala
我在类中使用Scala中的数组ArrayBuffer[Actor]
,其中Actor
是一个实现Ordered[Actor]
特征的类.如何在不编码的情况下对此数组进行排序?
我知道有一个被称为的对象Sorting
,但它似乎没有用,因为ArrayBuffer
没有实现/扩展正确的类.
我如何排序ArrayBuffer[A]
类型数组?
如果您使用的是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,则可以使用stableSort
该Sorting
对象的方法.这将获取元素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 :
缓冲区用于逐步创建元素序列
正如您在Actor
s 中使用它时,它可能用于某种actor队列 - 在这种情况下,您可能想要查看该Queue
集合.
希望能帮助到你,
- Flaviu Cipcigan