Unfortunately, scala.util.parsing.input.Position
does not extend Ordering[Position]
.
To sort a ListBuffer
of errors based on their position, I use the following code:
semanticErrors.sortBy(_.pos)(new Ordering[Position] {
def compare(x: Position, y: Position): Int = x.line - y.line
}).toList
I'm sure this can be done more elegantly. But how? For example, I noticed that Position
implements <
. Is there a generic wrapper which turns something that supports <
into an Ordering
?
Interestingly, this seems to be a lot easier when converting to a List
first:
semanticErrors.toList.sort((a, b) => a.pos < b.pos)
But this is probably not the most efficient solution. An in-place sort of the ListBuffer
would be ideal.
You can sort a ListBuffer
with the sortWith
method:
semanticErrors.sortWith(_.pos < _.pos)
Use sortWith
as drexin says is easiest as a one-off, but a couple of notes:
1) sort
is deprecated, so don't use it. The docs tell you to use sortWith
instead.
2) Ordering
is a typeclass, so things don't extend it (unlike Ordered
) . You just need to have one in implicit scope, which would normally be in a companion object. However Position
doesn't have a companion. So you can add the implicit yourself:
implicit val posOrd: Ordering[Position] = Ordering.fromLessThan(_ < _)
Then semanticErrors.sortBy(_.pos)
should work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With