如何在C#中对列表进行排序[重复]

Posted

技术标签:

【中文标题】如何在C#中对列表进行排序[重复]【英文标题】:How to sort a List in C# [duplicate] 【发布时间】:2010-07-19 07:03:12 【问题描述】:

我有一堂课:

public class MyObject

public string Name;
public int Age;

我有一个 Myobject 对象列表:

Name Age
ABC 12
BBC 14
ABC 11

如何根据条件对该列表进行排序:先排序名称,然后再排序年龄。有了这个列表,排序后的结果:

Name Age
ABC 11
ABC 12
BBC 14

【问题讨论】:

我这里还有一个问题:***.com/questions/3279248/… 【参考方案1】:

使用 LINQ 的两种不同方式:

1) 使用OrderByThenBy

l = l.OrderBy(x => x.Name).ThenBy(x => x.Age).ToList();

2) 使用查询语法:

l = (from x in l
     orderby x.Name, x.Age
     select x).ToList();

【讨论】:

【参考方案2】:
class Program

    static void Main(string[] args)
    
        var list = new List<MyObject>(new[]
        
            new MyObject  Name = "ABC", Age = 12 ,
            new MyObject  Name = "BBC", Age = 14 ,
            new MyObject  Name = "ABC", Age = 11 ,
        );
        var sortedList = from element in list
                         orderby element.Name
                         orderby element.Age
                         select element;

        foreach (var item in sortedList)
        
            Console.WriteLine("0 1", item.Name, item.Age);
        
    

【讨论】:

【参考方案3】:

使用System.Linq 可以轻松实现:

list = list.OrderBy(e=>e.Name).ThenBy(e=>e.Age);

同时检查这个答案:Sorting a list using Lambda/Linq to objects。

【讨论】:

【参考方案4】:

您可以使用 LINQ 执行以下操作:

class Program

    static void Main(string[] args)
    
        List<MyObject> list = new List<MyObject>();

        list.Add(new MyObject()  Age = 12, Name = "ABC" );
        list.Add(new MyObject()  Age = 11, Name = "ABC" );
        list.Add(new MyObject()  Age = 14, Name = "BBC" );

        var sorted = list.OrderBy(mo => mo.Name).ThenBy(mo => mo.Age);

        foreach (var myObject in sorted)
        
            Console.WriteLine(string.Format("0 - 1",
                              myObject.Name, myObject.Age));
        
    

【讨论】:

【参考方案5】:

您可以将一个新对象传递给 Order By,以便它按那个排序

class Program

    static void Main(string[] args)
    
        var list = new List<MyObject>(new[]
        
            new MyObject  Name = "ABC", Age = 12 ,
            new MyObject  Name = "BBC", Age = 14 ,
            new MyObject  Name = "ABC", Age = 11 ,
        );
        var sortedList = list.OrderBy( x => new  x.Name , x.Age );

        foreach (var item in sortedList)
        
            Console.WriteLine("0 1", item.Name, item.Age);
        
    

【讨论】:

以上是关于如何在C#中对列表进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# Windows 窗体中对字典进行排序[重复]

如何选择第 n 列,并在 BigQuery 中对列的选择进行排序

如何在 SQL Server 中按日期列排序的组中对列进行排名

如何在 Flutter 中对列表进行排序 [重复]

如何在Python中对版本标签列表进行排序[重复]

如何在Java中对ArrayList进行排序[重复]