【问题标题】:Sort ArrayBuffer[A] in scala?在scala中排序ArrayBuffer [A]?
【发布时间】:2009-12-23 11:03:38
【问题描述】:

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

我知道有一个名为 Sorting 的对象,但它似乎不起作用,因为 ArrayBuffer 没有实现/扩展正确的类。

如何对ArrayBuffer[A] 类型的数组进行排序?

【问题讨论】:

    标签: arrays sorting scala


    【解决方案1】:

    如果您使用的是 Scala 2.8,则可以使用继承自 SeqLike 特征的 ArrayBuffer[T] 类的 sortWith 方法。

    下面的代码 sn -p 对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:

    缓冲区用于增量创建元素序列

    当您将它与Actors 一起使用时,它可能用于某种类型的actor 队列——在这种情况下,您可能需要查看Queue 集合。

    希望对你有帮助,

    -- 弗拉维乌·西普西根

    【讨论】:

    • 我很愚蠢,我没有正确阅读描述,所以我认为 sortWith(...) 会改变 ArrayBuffer,因为我在 mutable 包中找到了类。感谢十亿,也尊重快速回复;)
    【解决方案2】:

    顺便说一句,这里的 Actor 类是我自己的类,用于在使用我的 scala 新游戏引擎(“Awesome Game Engine for Scala ~ AGES”)创建的世界中的“Actors”,因此它与并发无关演员班。此外,scala 中列表的实现是一片丛林,一切要么被弃用,要么以多种不同的方式实现......ArrayBuffer 满足我的需要(我需要一个可变大小的数组来包含演员)。

    希望这可以澄清:)

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多