按对象的属性对列表中的对象进行排序

本文关键字:对象 排序 属性 列表 | 更新日期: 2023-09-27 18:30:04

我在C#中有一个对象列表。所有对象都包含属性code1和code2(以及其他属性)。对象列表没有特定的顺序。我需要根据对象的code1和code2属性对对象列表进行排序。

示例:

List -> object = id, name, code1, code2, hours, amount.

示例代码1=004
示例代码2=001002003004016
示例代码1=0.05
示例代码2=001002003004

所以在排序之后,我希望对象按以下顺序

004 001
004 002
004 003
004 005
004 016
005 001
005 002
005 003
005 004

按对象的属性对列表中的对象进行排序

您可以使用linq扩展(使原始列表未排序):

var sorted = theList.OrderBy(o => o.code1).ThenBy(o => o.code2);

要将原始列表替换为已排序的列表,请稍作修改(效率不高,它会创建一个新列表):

theList = theList.OrderBy(o => o.code1).ThenBy(o => o.code2).ToList();

这假设您的列表是正确的类型,类似于:

List<MyClass> theList = new List<MyClass>();

而不是对象列表,在这种情况下,您需要使用.Cast<>().OfType<>()

请注意,Adam Houldsworth对.ToList()调用的回答不必要地创建了一个新列表。如果你的列表很大,这可能会造成无法接受的记忆压力。最好提供一个自定义比较功能:来对列表进行排序

theList.Sort((a, b) =>
    {
        var firstCompare = a.code1.CompareTo(b.code1);
        return firstCompare != 0 ? firstCompare : a.code2.CompareTo(b.code2);
    });

或者,如果这个排序是您的类型的内在属性,那么您可以在您的类型上实现IComparable<T>,并只调用

theList.Sort();

其将使用CCD_ 5实现。