Saa*_*per 429 c# sorting generics lambda list
我在Framework 3.5上使用C#.我正在寻找快速排序Generic List<T>
.为了这个例子,假设我有Person
一个属性列表,其属性为lastname.如何使用lambda表达式对此List进行排序?
List<Person> people = PopulateList();
people.OrderBy(???? => ?????)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 676
如果您的意思是就地排序(即列表已更新):
people.Sort((x, y) => string.Compare(x.LastName, y.LastName));
Run Code Online (Sandbox Code Playgroud)
如果你的意思是新的清单:
var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 93
您是否需要对列表进行分类,或者只是列表内容的有序序列?后者更容易:
var peopleInOrder = people.OrderBy(person => person.LastName);
Run Code Online (Sandbox Code Playgroud)
要进行排序,你需要一个IComparer<Person>
或一个Comparison<Person>
.为此,您可能希望ProjectionComparer
在MiscUtil中考虑.
(我知道我一直把MiscUtil搞定 - 它只是保持相关......)
Dan*_*mal 23
people.OrderBy(person => person.lastname).ToList();
Run Code Online (Sandbox Code Playgroud)
小智 23
你可以使用linq :)使用:
System.linq;
var newList = people.OrderBy(x=>x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
小智 13
private void SortGridGenerico< T >(
ref List< T > lista
, SortDirection sort
, string propriedadeAOrdenar)
{
if (!string.IsNullOrEmpty(propriedadeAOrdenar)
&& lista != null
&& lista.Count > 0)
{
Type t = lista[0].GetType();
if (sort == SortDirection.Ascending)
{
lista = lista.OrderBy(
a => t.InvokeMember(
propriedadeAOrdenar
, System.Reflection.BindingFlags.GetProperty
, null
, a
, null
)
).ToList();
}
else
{
lista = lista.OrderByDescending(
a => t.InvokeMember(
propriedadeAOrdenar
, System.Reflection.BindingFlags.GetProperty
, null
, a
, null
)
).ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这个有用的虚拟指南 - 在通用列表中排序 - 工作.通过非常完整和清晰的解释和简单的示例,它可以帮助您理解4种方式(重载)来完成这项工作
小智 5
您可以使用此代码段:
var New1 = EmpList.OrderBy(z => z.Age).ToList();
Run Code Online (Sandbox Code Playgroud)
这里New1
是一个List<Employee>
.
EmpList
是变量的List<Employee>
.
z
是一个Employee
类型的变量.
小智 5
你也可以使用
model.People = model.People.OrderBy(x => x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)