我在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
答案 0 :(得分:16)
您可以使用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<>()
。
答案 1 :(得分:9)
请注意,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()
实施。