我在Framework 3.5上使用c#。我想快速排序一个通用列表<T>。对于这个例子,假设我有一个List of a Person类型,其属性为lastname。如何使用lambda表达式对这个列表进行排序?

List<Person> people = PopulateList();
people.OrderBy(???? => ?????)

当前回答

您需要在适当的位置对列表进行排序,还是仅仅是列表内容的有序序列?后者更容易:

var peopleInOrder = people.OrderBy(person => person.LastName);

要在适当的位置排序,您需要一个iccompare <Person>或一个Comparison<Person>。为此,您可能希望考虑MiscUtil中的ProjectionComparer。

(我知道我一直在提MiscUtil -它只是一直相关…)

其他回答

如果你指的是就地排序(即更新列表):

people.Sort((x, y) => string.Compare(x.LastName, y.LastName));

如果你指的是新列表:

var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional

您需要在适当的位置对列表进行排序,还是仅仅是列表内容的有序序列?后者更容易:

var peopleInOrder = people.OrderBy(person => person.LastName);

要在适当的位置排序,您需要一个iccompare <Person>或一个Comparison<Person>。为此,您可能希望考虑MiscUtil中的ProjectionComparer。

(我知道我一直在提MiscUtil -它只是一直相关…)

你也可以使用

model.People = model.People.OrderBy(x => x.Name).ToList();

你可以使用linq:)使用:

System.linq;
var newList = people.OrderBy(x=>x.Name).ToList();

在. net 7预览版中,你可以使用System.Linq的简化排序。它还具有一些性能改进。

var sorted = people.Order();

另外,请注意Sort方法在大多数情况下具有更好的性能,因为您不分配新列表。