假设我有一个Person类,其中包含Name、Age和Level属性。
我知道如何按照其中一个属性进行排序,使用
PersonList.Sort(delegate(Person p1, Person p2) {
return p1.Name.CompareTo(p2.Name);
});
但是如何按照姓名、年龄和级别进行排序。
相当于SQL语句:ORDER BY Name,Age,Level
谢谢
修改现有代码:
PersonList.Sort(delegate(Person p1, Person p2) {
int r = p1.Name.CompareTo(p2.Name);
if (r == 0) r = p1.Age.CompareTo(p2.Age);
if (r == 0) r = p1.Level.CompareTo(p2.Level);
return r;
});
或者,一个简单的类似LINQ的解决方案:
PersonList = PersonList.OrderBy(p => p.Name)
.ThenBy(p => p.Age)
.ThenBy(p => p.Level).ToList();
您是否考虑过切换到.NET 3.5并使用LINQ?在LINQ中,像这样的事情非常容易:
personList = personList.OrderBy(p => p.Name).
ThenBy(p => p.Age).ThenBy(p => p.Level).ToList();
我建议在你的Person类上实现IComparable接口。在你自定义的比较方法中,你可以设置逻辑来比较所有三个属性,并确保这三个属性有适当的“权重”(例如,如果两个Person实例具有相同的姓名,那么下一个排序应该是按年龄还是按级别)。
假设您正在使用.NET 3.5
IQueryable<Person> people = PersonList.AsQueryable();
return people.OrderBy(x => x.Name).ThenBy(x => x.Age).ThenBy(x => x.level);
var result = (from p in PersonList
orderby p.Name, p.Age, p.Level
select p).ToList();
var x = (from p in PersonList
orderby p.Name, p.Age, p.Level
select p).ToList();
var result = from p in persons
orderby p.Name, p.Age, p.Level
select p;