13

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

例子:

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

示例代码 1 = 004
示例代码 2 = 001、002、003、004、016
示例代码 1 = 005
示例代码 2 = 001、002、003、004

因此,在排序之后,我希望按以下顺序排列对象

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

2 回答 2

23

您可以使用 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<>()or .OfType<>()

于 2012-04-04T14:29:10.317 回答
11

请注意,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();

...这将使用IComparable<T>.CompareTo()实现。

于 2012-04-04T15:06:48.843 回答