繁体   English   中英

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

[英]Sort ArrayBuffer[A] in scala?

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

我知道有一个名为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中使用它一样,它可能用于某种actor队列 - 在这种情况下,您可能想要查看Queue集合。

希望能帮助到你,

- Flaviu Cipcigan

顺便说一句,这里的Actor类是我自己的类,用于使用我的scala新游戏引擎(“Scala~AGES的真棒游戏引擎”)创建的世界中的“Actors”,所以它与并发actor类没有任何关系。 此外,scala中列表的实现是一个丛林,一切都被弃用或以很多不同的方式实现... ArrayBuffer适合我的需要(我需要一个可变大小的数组用于包含actor)。

希望这澄清:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM