【问题标题】:Sort a List<T> by one of T's property [duplicate]按 T​​ 的属性之一对 List<T> 进行排序[重复]
【发布时间】:2013-05-07 19:44:23
【问题描述】:

我有一个List&lt;T&gt;

如何按 T 的 int 属性之一对其进行升序排序?

我知道我可以手动创建自己的方法,但是有什么方法可以简洁地做到这一点,例如 List&lt;T&gt;.Sort( by T's int property ); ?

【问题讨论】:

  • 你可以使用 LINQ 吗?
  • 您的意思是一般按属性排序,还是只是一般的List&lt;T&gt;,您也有完全访问权限?

标签: c#


【解决方案1】:

您可以使用 Enumerable Orderby 按其属性进行排序。

List<yourType> yourCollection = YourSourceList.OrderBy(e=>e.YourProperty).ToList();

【讨论】:

  • @TimSchmelter 感谢您的反馈。我改变了它。它不是 LINQ。这是一个简单的 Enumerable 类。
  • Enumerable.OrderByToList 是 Linq 方法,ToList 会创建一个新的 List,即使已经有一个。 List.Sort(或Array.Sort)的目的是避免创建一个新的collecton,因为这会使所需的内存加倍(暂时):
  • @TimSchmelter 我知道。 ToList() 创建一个新的。 Sort() 将在同一个列表中进行更改。所以排序是高效的。
  • Linq 位于其命名空间中,EnumerableSystem.Linq 命名空间的一部分。这是Linq-To-Objects
  • @TimSchmelter 感谢您提供信息。
【解决方案2】:

是的,你可以使用List&lt;T&gt;.Sort

list.Sort((t1, t2) => t1.IntProperty.CompareTo(t2.IntProperty));

一种效率较低但更易读的方法是使用Enumerable.OrderBy

list = list.OrderBy(t => t.IntProperty).ToList();

【讨论】:

  • 谁想评论反对票?
  • 3 票反对以获得正确答案? wtf?
  • +1 投了好答案并减少了 Downvote 影响 :)
【解决方案3】:

试试这个:

 List<T> lst=List<T>.OrderBy(x => x.Property).ToList();

【讨论】:

    【解决方案4】:

    您可以编写自己的Comparer 类。然后使用该类进行排序,例如:

    myList.Sort(new MyListComparer());
    

    【讨论】:

      【解决方案5】:

      Hey Try This code to your list for sorting ASC/DESC

       List<HRDocumentCheckList> ser=new List<HRDocumentCheckList>();
       ser.OrderByDescending(q => q.Document.Id).ToList();
      

      希望对你有帮助

      【讨论】:

        【解决方案6】:

        对于无权使用 Lamda 表达式方法的人,被接受为答案的人可以遵循以下给定的方法。核心思想是实现IComparable&lt;Person&gt;,从而检查对象中定义的任何特定属性/字段,这里是'Person'。

        public class ConsoleApp
            {
                private static void Main(string[] args)
                {
                    List<Person> p = new List<Person>();
                    p.Add(new Person() {Age = 25, Name = "Jo"});
                    p.Add(new Person() {Age = 10, Name = "Jo"});
                    p.Add(new Person() {Age = 2, Name = "Jo"});
                    p.Sort();
        
                }
            }
        
            public class Person : IComparable<Person>
            {
                public string Name { get; set; }
                public int Age { get; set; }
        
                public int CompareTo(Person other)
                {
                    return other == null ? 1 : Age.CompareTo(other.Age);
                }
            }
        

        【讨论】:

          猜你喜欢
          • 2019-07-02
          • 1970-01-01
          • 2021-05-25
          • 1970-01-01
          • 2020-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多