【问题标题】:How to sort a List in C# [duplicate]如何在C#中对列表进行排序[重复]
【发布时间】: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

【问题讨论】:

标签: c# .net


【解决方案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);
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-27
            • 2023-03-03
            • 2023-03-16
            • 2010-10-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-09
            相关资源
            最近更新 更多