OrderBy()。ThenBy()输出错误

时间:2014-01-16 05:30:42

标签: c# linq list sorting point

我有一个包含50个元素的点列表,我想对它们进行排序,因此我使用了orderby,但我的输出似乎是错误的。第一个元素相应地排序,但下一个元素是错误的,这是一个屏幕截图。

enter image description here

正确排序的前五个数据应该是其他数据。但接下来的不是。我不知道是什么问题。

所以接下来的五个输出必须是:

{X=249, Y=198}

{X=249, Y=308}

{X=249, Y=413}

{X=249, Y=519}

{X=249, Y=629}

我的列表是PointF列表:

List<PointF> points = new List<PointF>();

这是我的代码:

points = points.OrderBy(c => c.X).ThenBy(c => c.Y).ToList();

1 个答案:

答案 0 :(得分:6)

请确认您的积分X值确实相等。我假设249249.000001可能会在列表框中呈现为“249”,但对于排序目的而言则不相同。

我建议您将代码更改为

points = points.OrderBy(c => Math.Round(c.X)).ThenBy(c => c.Y).ToList();

并查看问题是否已消失。

UPDATE:如果您的坐标应为非整数,请切换到与指定精度进行比较:

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();

此外,您可以使用Round(c.X)代替(int)c.X,因为您的评论表明这是您将值输出到列表框的方式。