不幸的是,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
的就地排序是理想的。
答案 0 :(得分:8)
您可以使用ListBuffer
方法对sortWith
进行排序:
semanticErrors.sortWith(_.pos < _.pos)
答案 1 :(得分:4)
使用sortWith
,因为drexin说这是一次性的最简单,但有几个注意事项:
1){@ 1}}已弃用,因此请勿使用它。文档会告诉您改为使用sort
。
2)sortWith
是类型类,所以事情不会扩展它(与Ordering
不同)。您只需要在隐式作用域中有一个,通常在伴随对象中。但是Ordered
没有伴侣。所以你可以自己添加隐含的内容:
Position
然后implicit val posOrd: Ordering[Position] = Ordering.fromLessThan(_ < _)
应该有用。