我在斯卡拉的一个数组ArrayBuffer[Actor]
,其中Actor
是一个实现Ordered[Actor]
特质的类。我如何排序这个数组而无需手动编码?在Scala中排序ArrayBuffer [A]?
我知道有一个对象叫做Sorting
,但它似乎不起作用,因为ArrayBuffer
没有实现/扩展正确的类。
如何对ArrayBuffer[A]
类型数组进行排序?
我在斯卡拉的一个数组ArrayBuffer[Actor]
,其中Actor
是一个实现Ordered[Actor]
特质的类。我如何排序这个数组而无需手动编码?在Scala中排序ArrayBuffer [A]?
我知道有一个对象叫做Sorting
,但它似乎不起作用,因为ArrayBuffer
没有实现/扩展正确的类。
如何对ArrayBuffer[A]
类型数组进行排序?
如果您使用的是Scala 2.8,您可以使用ArrayBuffer[T]
类的sortWith
方法,它继承自SeqLike
特征。
下面的代码片段按升序排序的ArrayBuffer[T]
对象:
def ascendingSort[T <% Ordered[T]](xs: ArrayBuffer[T]) = xs.sortWith(_ < _)
注意,这并不发生变异的实际ArrayBuffer
,而是创建一个新的与正确的顺序的元素。
如果您使用的是Scala 2.7,则可以使用Sorting
对象的stableSort
方法。这需要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
集合。
希望它能帮助,
- Flaviu Cipcigan
顺便说一句,在演员类,这里是我用于在世界“演员”自己的类使用Scala的我的新的游戏引擎创建(“真棒游戏引擎for Scala〜AGES“),因此它与并发actor类无关。另外,scala中的列表实现是一个丛林,一切都被弃用或以许多不同的方式实现...... ArrayBuffer适用于我的需要(我需要一个包含actor的可变大小数组)。
希望这澄清了:)
我很愚蠢,我没有阅读说明正确的,所以我认为sortWith(...)会发生变异的ArrayBuffer,因为我发现类的可变包。 谢谢十亿,也敬请快速回复;) – Felix 2009-12-23 14:13:35