我在Framework 3.5上使用c#。我想快速排序一个通用列表<T>。对于这个例子,假设我有一个List of a Person类型,其属性为lastname。如何使用lambda表达式对这个列表进行排序?
List<Person> people = PopulateList();
people.OrderBy(???? => ?????)
我在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方法在大多数情况下具有更好的性能,因为您不分配新列表。