如何在C#/.NET中对List<T>进行排序

15

我有一个名为PropertyDetails的类:

public class PropertyDetails
{

     public int Sequence { get; set; }

     public int Length { get; set; }

     public string Type { get; set; }
}

我正在创建一个PropertyDetails列表

List<PropertyDetails> propertyDetailsList=new List<PropertyDetails>();

我想按照 PropertyDetails.Sequence 对这个列表进行排序。

欢迎使用Linq解决方案。


List<PropertyDetails> propertyDetailsList = new List<PropertyDetails>(); - PramodChoudhari
4个回答

39
如果您希望就地对现有列表进行排序,则可以使用 Sort 方法:
List<PropertyDetails> propertyDetailsList = ...
propertyDetailsList.Sort((x, y) => x.Sequence.CompareTo(y.Sequence));

如果你想要创建一个新的、排序后的列表,那么可以使用LINQ的OrderBy方法:

List<PropertyDetails> propertyDetailsList = ...
var sorted = propertyDetailsList.OrderBy(x => x.Sequence).ToList();

(如果你不需要将结果作为一个具体的 List<T>,那么可以省略最后的 ToList 调用。)


2
当你可以使用泛型时,不要在C#中使用非泛型集合。使用泛型集合的理由有很多(除非是特殊情况)。您可以查看此问题以获取更多信息:When would you not use Generic Collections?因此,您可以使用List<PropertyDetails>(我相信它公开了一个Sort()方法)或SortedList<,>

1

使用 Linq,您可以创建一个新的已排序列表:

list.OrderBy(x => x.Sequence).ToList();

如果您想对当前列表进行排序,可以使用比较器:
list.Sort((details1, details2) => details1.Sequence.CompareTo(details2.Sequence);

3
这不是“原地”的操作,由于需要创建全新的集合,因此效率较低。 - Jonathan Wood

0
var sortedList = propertyDetailsList.OrderBy(pd => pd.Sequence);

2
实际上并不是对列表进行排序,而是创建一个新的IEnumerable,其中包含已排序的项...我仍然认为这是所请求的解决方案。 - Stefan Steinegger
1
它不是一个“sortedList”,而是一个“IOrderableEnumerable<T>”。它需要使用“.ToList()”方法来创建一个真正的“sortedList”。 - JCKödel
因此使用 "var",sortedList 只是变量名。 - Tahbaza
1
我觉得有必要指出,将某个东西称为“sortedList”,然后使用“var”来隐藏它实际上并不是一个已排序的列表这一事实,这只是非常糟糕的做法。 - Clonkex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接