猿问

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

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


蝴蝶不菲
浏览 834回答 3
3回答

慕容708150

请记住,如果比较所有成员,则不需要稳定的排序。根据要求,2.0解决方案可以如下所示:&nbsp;public void SortList() {&nbsp; &nbsp; &nbsp;MyList.Sort(delegate(MyClass a, MyClass b)&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int xdiff = a.x.CompareTo(b.x);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (xdiff != 0) return xdiff;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else return a.y.CompareTo(b.y);&nbsp; &nbsp; &nbsp;});&nbsp;}请注意,此2.0解决方案仍然比流行的3.5 Linq解决方案更可取,它执行就地排序并且不具有Linq方法的O(n)存储要求。除非您当然希望原始的List对象保持不变。

阿波罗的战车

对于可以使用LINQ OrderBy和ThenBy(或者,ThenByDescending如果需要)的.Net版本:using System.Linq;....List<SomeClass>() a;List<SomeClass> b = a.OrderBy(x => x.x).ThenBy(x => x.y).ToList();注意:对于.Net 2.0(或如果您不能使用LINQ),请参阅Hans Passant对这个问题的回答。
随时随地看视频慕课网APP
我要回答