我有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的表达式可以做到这一点?
答案 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;
});
{ ... }
中的代码是关于如何构建必须在多个字段上工作的比较器函数的好“模板”。