对列表中的2D数据进行排序

时间:2015-06-29 11:25:29

标签: c# linq sorting

我有Point

class Point
{
    double X, Y;
}

并定义了Point

的列表
List<Point> list;

如何对列表进行排序,使其首先按X排序,然后按Y排序?

这意味着我的数据在排序时看起来像这样:

{1,1}
{1,2}
{1,3}
{2,2}
{2,5}
{2,7}

首先是X,然后是Y

我试过用的是:

list.OrderBy(a=>a.X);

但这可能无法确保Y也被订购。是否有类似LINQ的表达式可以做到这一点?

2 个答案:

答案 0 :(得分:3)

使用Orderby...ThenBy

list.OrderBy(p => p.X).ThenBy(p => p.Y);

答案 1 :(得分:0)

如果您想“就地”对其进行排序(无需创建新集合),您可以:

list.Sort((p, q) =>
{
    int res = p.X.CompareTo(q.X);

    if (res == 0)
    {
        res = p.Y.CompareTo(q.Y);

        // If you had a Z:
        //if (res == 0)
        //{
        //    res = p.Z.CompareTo(q.Z);
        //}
    }

    return res;
});

{ ... }中的代码是关于如何构建必须在多个字段上工作的比较器函数的好“模板”。