List<> OrderBy Alphabetical Order类似,我们希望按一个元素排序,然后再按另一个元素排序.我们希望实现与

SELECT * from Table ORDER BY x, y  

我们有一个类,它包含许多排序函数,并且通过一个元素进行排序没有问题

public class MyClass {
    public int x;
    public int y;
}  

List<MyClass> MyList;

public void SortList() {
    MyList.Sort( MySortingFunction );
}

我们的 list 如下:

Unsorted     Sorted(x)     Desired
---------    ---------    ---------
ID   x  y    ID   x  y    ID   x  y
[0]  0  1    [2]  0  2    [0]  0  1
[1]  1  1    [0]  0  1    [2]  0  2
[2]  0  2    [1]  1  1    [1]  1  1
[3]  1  2    [3]  1  2    [3]  1  2

稳定排序更好,但不是必需的.这个解决方案对你有用.Net 2.0是受欢迎的.

推荐答案

请记住,如果比较所有成员,则不需要稳定排序.根据要求,2.0解决方案可以如下所示:

 public void SortList() {
     MyList.Sort(delegate(MyClass a, MyClass b)
     {
         int xdiff = a.x.CompareTo(b.x);
         if (xdiff != 0) return xdiff;
         else return a.y.CompareTo(b.y);
     });
 }

请注意,此2.0解决方案仍然比流行的3.5Linq解决方案更可取,它执行就地排序,并且没有LINQ方法的O(N)存储需求.当然,除非您希望原始列表对象保持不变.

.net相关问答推荐

AutoMapper在实体框架查询后不知从哪里带来数据

如何将多个安装程序Bundle 到一个安装程序中?

在数据网格中:如何在更改单元格 A 中的值后显示单元格 B 中的更改

是否有内置方法将 nuget 包引用为 csproj 中的文件?

在目录中创建应用程序快捷方式

使用多个 MemoryCache 实例

如何使用c#从excel文件中读取数据

C# 中 try/finally 的开销?

运算符重载 ==, !=, Equals

为什么 LINQ .Where(predicate).First() 比 .First(predicate) 快?

资源(.resx)文件有什么好处?

如何防止任务的同步延续?

将日期时间转换为时间跨度

List 是否保证项目将按照添加的顺序返回?

判断 .NET 中的目录和文件写入权限

IronPython 与 Python .NET

如何使用 NPOI 读取文件

/langversion 的错误选项6无效;必须是 ISO-1、ISO-2、3、4、5 或默认值

使用 C# vs F# 或 F# vs C# 有什么好处?

序列化一个可为空的 int