gpt4 book ai didi

scala - 按位置对 ListBuffer 进行排序

转载 作者:行者123 更新时间:2023-12-04 22:22:46 24 4
gpt4 key购买 nike

不幸的是, scala.util.parsing.input.Position 没有扩展 Ordering[Position]

要根据错误的位置对错误的 ListBuffer 进行排序,我使用以下代码:

semanticErrors.sortBy(_.pos)(new Ordering[Position] {
def compare(x: Position, y: Position): Int = x.line - y.line
}).toList

我相信这可以更优雅地完成。但是如何?例如,我注意到 Position 实现了 < 。是否有一个通用包装器可以将支持 < 的内容转换为 Ordering

有趣的是,当首先转换为 List 时,这似乎容易得多:
semanticErrors.toList.sort((a, b) => a.pos < b.pos)

但这可能不是最有效的解决方案。 ListBuffer 的就地排序将是理想的。

最佳答案

使用 sortWith 作为 drexin 所说的最简单的一次性使用,但有几个注意事项:

1) sort 已弃用,所以不要使用它。文档告诉您改用 sortWith

2) Ordering 是一个类型类,所以事情不会扩展它(不像 Ordered )。您只需要在隐式范围内有一个,它通常在一个伴随对象中。但是 Position 没有同伴。所以你可以自己添加隐式:

implicit val posOrd: Ordering[Position] = Ordering.fromLessThan(_ < _)

然后 semanticErrors.sortBy(_.pos) 应该可以工作。

关于scala - 按位置对 ListBuffer 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com