用C#排序列表(带有各种参数)

我有一个对象列表。 该对象具有各种领域,例如年龄和名称

现在有时我想按名字排序,有时候按年龄排序。 额外的有时增加顺序,有时减少顺序。

现在我明白我应该在我的对象中实现Comparable接口并覆盖CompareTo方法。

但是,当我想支持各种排序订单时,我该怎么做呢?

我是否必须在我的对象中设置排序顺序,还是以某种方式通过sort方法调用传递排序顺序?

方法调用可以做任何事情; 不需要比较器:

list.Sort((x,y)=>string.Compare(x.Name,y.Name)); list.Sort((x,y)=>y.Age.CompareTo(x.Age)); // desc list.Sort((x,y)=>x.Age.CompareTo(y.Age)); // asc 

注意第二个是降序,通过在比较中交换x / y。

如果您正在使用List并且想要对列表进行排序,那么Sort函数会提供一个接受Comparison的重载。 您可以使用它来为列表提供不同的比较。

例如,要按Age排序:

 list.Sort((x, y) => x.Age.CompareTo(y.Age)); 

要对Name排序:

 list.Sort((x, y) => string.Compare(x.Name, y.Name)); 

要按降序排序,只需反转参数即可。

或者,您可以使用LINQ针对您的列表创建各种查询 ,以您喜欢的顺序提供结果,但这不会对基础列表产生任何影响(无论是坏的还是好的都取决于您):

 var byAge = list.OrderBy(x => x.Age); var byName = list.OrderBy(x => x.Name); 

要按降序排序,请使用OrderByDescending代替OrderBy

你也可以使用LINQ来处理这个问题:

 var sortedByAge = myList.OrderBy(i => i.Age); var sortedByName = myList.OrderBy(i => i.Name); 

如果要在适当的位置处理排序,可以使用List.Sort(Comparison)

 // Sort by Age myList.Sort( (l, r) => l.Age.CompareTo(r.Age) ); // Sort by Name myList.Sort( (l, r) => l.Name.CompareTo(r.Name) ); 

您可以使用linq对对象数据进行排序

这样的事情

 var query = from cust in customers orderby cust.Age ascending select cust;