小编典典

C#List <>按x然后按y排序

c#

类似于List <>
OrderBy按字母顺序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 );
}

我们在列表中有以下内容:

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的解决方案。


阅读 484

收藏
2020-05-19

共1个答案

小编典典

请记住,如果比较所有成员,则不需要稳定的排序。根据要求,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.5
Linq解决方案更可取,它执行就地排序并且不具有Linq方法的O(n)存储要求。除非您当然希望原始的List对象保持不变。

2020-05-19