C#自定义按枚举或列表排序

本文关键字:列表 排序 枚举 自定义 | 更新日期: 2023-09-27 18:13:40

我需要为List构建一个分类器类。

我希望排序规则或优先级为:

SFC=1 SSG=2 SGT=3 CPL=4 SPC=5等…

所以当我排序的时候,我会按照正确的顺序得到这些,先是排名,然后是姓氏。

List<Person> person = new List<Person>(); 
person.Rank
person.LastName
person.FirstName

等等。。。

请给我介绍一篇文章或说明。感谢

C#自定义按枚举或列表排序

您能使用LINQ吗?

person.OrderBy(p => p.Rank).ThenBy(p => p.LastName)

或者使用带有orderby子句的查询语法:

from p in person
orderby p.Rank, p.LastName
select p
公共枚举排名{SFC=1,SSG,SGT}公共类人员{public Rank Rank{get;set;}公共字符串名称{get;set;}}static void Main(string[]args({var人员=新列表<个人>{新人{姓名="Aaaa",职级=职级.SFC},新人{Name="Bbbb",Rank=Rank.SFC},新人{姓名="Aaaa",职级=职级.SSG}};foreach(var person-in-perse.OrderBy(p=>p.Rank(.ThenBy(p=>p.Name(({Console.WriteLine("{0}{1}",person.Rank,person.Name(;}}

输出:

SFC AaaaSFC BbbbSSG Aaaa
var ordered = person.OrderBy(p => p.Rank)
                    .ThenBy(p => p.LastName)
                    .ThenBy(p => p.FirstName);

请注意,这不会修改person。它只生成一个迭代器,当它被迭代时,就会产生按指定顺序返回的person的结果。如果你想修改列表,你必须采取一种稍微不同的方法(注意,仅仅说person = ordered.ToList();是不够的,因为它实际上创建了一个List<Person>的新实例。

使用linq

var list = from xx in person
order by xx.Rank, xx.LastName
select xx

它将按等级和姓氏进行排序

试试这个。。。。

 var result = from m in person
             orderby m.Rank, m.LastName
             select m;

或者你可以试试这个。。。。

 var result = person.OrderBy(m=> m.Rank) 
                .ThenBy(m => m.LastName) 
                .ThenBy(m => m.FirstName); 

Person类应该从接口Icomparable继承。要做到这一点,您必须实现compareto((方法。然后您可以使用列表的排序方法。