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
等等。。。
请给我介绍一篇文章或说明。感谢
您能使用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((方法。然后您可以使用列表的排序方法。