【问题标题】:Sorting object list by string property C# [duplicate]按字符串属性C#对对象列表进行排序[重复]
【发布时间】:2011-10-11 01:23:33
【问题描述】:

可能的重复:
Sorting a list using Lambda/Linq to objects
C# List<> OrderBy Alphabetical Order

如何通过字符串属性按字母顺序对对象列表进行排序。

我尝试在属性上实现 IComparable,但我只知道如何对第一个字符进行排序(使用 char)。

编辑:这是一些示例代码。

class MyObject {
    public string MyProperty {get;set;}
}

List<MyObject> sampleList = new List<MyObject>();    

MyObject sample = new MyObject();
sample.MyProperty = "Aardvark";

MyObject sample2 = new MyObject();
sample2.MyProperty = "Zebra";

sampleList.Add(sample);
sampleList.Add(sample2);

sampleList.Sort(); // or something similar

foreach (var item in sampleList) {
    Console.WriteLine(item.MyProperty);
}

应该输出 Aardvark 和 Zebra(按字母顺序)。

谢谢!

【问题讨论】:

标签: c# .net


【解决方案1】:

您可以使用 Comparision 委托,使用 Sort(Comparision&lt;T&gt; comparision) 重载来实现。

list.Sort((a, b) =>  a.StringProperty.CompareTo(b.StringProperty));

【讨论】:

    【解决方案2】:

    你可以像这样得到一个排序的IEnumerable&lt;MyObject&gt;

    var sortedQuery = sampleList.OrderBy(x => x.MyProperty);
    

    然后您可以将查询转换为这样的列表:

    var sortedList = sortedQuery.ToList();
    

    或者,您可以只遍历项目:

    foreach (var obj in sortedQuery)
        Console.WriteLine(obj.MyProperty);
    

    【讨论】:

      【解决方案3】:

      假设您的集合实现了IEnumerable 接口,您可以简单地在您的集合上调用OrderBy 方法:

      myCollection.OrderBy(c => c.Property);
      

      【讨论】:

        【解决方案4】:
        var list = new List<SomeClass>();
        // add some instances of SomeClass to list
        list.Sort((x, y) => x.SomeProperty.CompareTo(y.SomeProperty));
        

        【讨论】:

          【解决方案5】:

          将代码转换为C#,

          如果你有一个列表对象 ABC,列表中的每个对象都有一个字符串属性 S,

          将我的列表调暗为新列表(ABC)

              Dim a = From i In Mylist _
                     Order By i.S Ascending
          

          你会得到一个结果,放在一个迭代器上。

          【讨论】:

            【解决方案6】:

            确保包含 System.Collections.Generic 和 System.Linq。

                List<myItemType> lst = new List<myItemType>();
                return lst.OrderBy(i => i.StringPropertyName);
            

            【讨论】:

            • 嗨 Jason - 它返回一个可枚举的实例,枚举将被排序。我想你可以做 lst = new List(lst.OrderBy(...));
            猜你喜欢
            • 2010-10-26
            • 2018-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-02
            • 2018-10-12
            • 1970-01-01
            • 2021-06-27
            相关资源
            最近更新 更多