I have a list of Points with 50 elements, I wanted to sort them so I used orderby thenby to, but my output seems to be wrong. The first elements are sorted in accordingly, but the next ones are wrong, here is a screen shot.
The 1st five data where sorted correctly, that should be what the other data would be. but the next ones are not. I don't know what is the problem.
So the next five output must be:
{X=249, Y=198}
{X=249, Y=308}
{X=249, Y=413}
{X=249, Y=519}
{X=249, Y=629}
My list is a PointF list:
List<PointF> points = new List<PointF>();
Here is my code:
points = points.OrderBy(c => c.X).ThenBy(c => c.Y).ToList();
Please verify that your points' X values are indeed equal. I assume both 249
and 249.000001
may get rendered as "249" in a listbox, but will not be equal for the ordering purposes.
I suggest changing your code to
points = points.OrderBy(c => Math.Round(c.X)).ThenBy(c => c.Y).ToList();
and seeing if the problem is gone.
UPDATE: if your coordinates are expected to be non-integers, switch to comparing with specified precision:
var precision = 0.001; // choose the value that suits you. If the tow values are different by less than this amount, the values are considered equal.
points = points.OrderBy(c => Math.Round(c.X / precision)).ThenBy(c => c.Y).ToList();
Also, instead of using Round(c.X)
you could use (int)c.X
, since your comments indicate that this is how you output your values to the listbox.
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