为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2019-10-17 14:53:44
类似于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的解决方案。
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

请记住,如果比较所有成员,则不需要稳定的排序。根据要求,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对象保持不变。


查看完整回答
反对 回复 2019-10-17
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

对于可以使用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对这个问题的回答。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 833 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信