我需要为List构建一个分类器类。
我希望排序规则或优先级为:
SFC = 1 SSG = 2 SGT = 3 CPL = 4 SPC = 5 ETC ...
因此,当我排序时,我会按照排名先排序,然后按姓氏来获得正确的顺序。
List<Person> person = new List<Person>();
person.Rank
person.LastName
person.FirstName
... ETC
请引导我阅读文章或说明。感谢
答案 0 :(得分:3)
你能使用LINQ吗?
person.OrderBy(p => p.Rank).ThenBy(p => p.LastName)
或使用orderby子句的查询语法:
from p in person
orderby p.Rank, p.LastName
select p
答案 1 :(得分:1)
public enum Rank { SFC = 1, SSG, SGT } public class Person { public Rank Rank { get; set; } public string Name { get; set; } } static void Main(string[] args) { var persons = new List<Person> { new Person{ Name = "Aaaa", Rank = Rank.SFC }, new Person{ Name = "Bbbb", Rank = Rank.SFC }, new Person{ Name = "Aaaa", Rank = Rank.SSG } }; foreach (var person in persons.OrderBy(p => p.Rank).ThenBy(p => p.Name)) { Console.WriteLine("{0} {1}", person.Rank, person.Name); } }
输出:
SFC Aaaa SFC Bbbb SSG Aaaa
答案 2 :(得分:1)
var ordered = person.OrderBy(p => p.Rank)
.ThenBy(p => p.LastName)
.ThenBy(p => p.FirstName);
请注意,这不会修改person
。它只生成一个迭代器,迭代时产生以指定顺序返回的person
结果。如果您想要修改列表,则必须采用稍微不同的方法(请注意,仅仅person = ordered.ToList();
并不足以说明实际创建List<Person>
的新实例。
答案 3 :(得分:0)
使用linq
var list = from xx in person
order by xx.Rank, xx.LastName
select xx
它将按等级和姓氏排序
答案 4 :(得分:0)
试试这个......
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);
答案 5 :(得分:0)
您的类Person应该从Icomparable接口继承。这样做你必须实现compareto()方法。然后你可以使用List的排序方法。