啊!终于整明白了!
今天拿出一点时间研究了一下C#的List<T>如何排序,基本上整明白了。很多场景下,用这个排序还是很方便的。
//构造一个类
public class mth
{
//编号
private string id;
public string Id
{
get { return id; }
set { id = value; }
}
//年龄
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
//薪水
private int salary;
public int Salary
{
get { return salary; }
set { salary = value; }
}
}
//实例化3个对象
mth m = new mth();
m.Id = "1";
m.Age = 35;
m.Salary = 60000;
mth n = new mth();
n.Id = "2";
n.Age = 33;
n.Salary = 55000;
mth p = new mth();
p.Id = "3";
p.Age = 25;
p.Salary = 80000;
//创建一个mList集合,把上面3个对象放进去
List<mth> mList = new List<mth>();
mList.Add(m);
mList.Add(n);
mList.Add(p);
这时,如果我们想按年龄由低到高排序,就可以使用CompareTo()来操作,如下
mList.Sort((x, y) => x.Age.CompareTo(y.Age));
排序后,再看看mList里面的样子:
foreach (mth mt in mList)
{
Console.WriteLine(mt.Id);
}
这时,如果想按薪水由高到低排序(降序),那么,我们除了把Age换成Salary外,还需要在前面加个 - ,如下:
mList.Sort((x, y) => -x.Salary.CompareTo(y.Salary));
这时,如果再加入一个对象:
mth boss = new mth();
boss.Id = "4";
boss.Age = 42;
boss.Salary = 80000;
mList.Add(boss);
PS: 没想到吧,boss的薪水竟然跟p的一样多~
boss说,按薪水从高到低的顺序排列,如果薪水一样,年龄大的在前,年龄小的在后
那么,我们可以这样排序:
mList.Sort((x, y) => -x.Salary.CompareTo(y.Salary)*2-x.Age.CompareTo(y.Age));
看到了没?权重大的可以在后面*n,这个n相当于一个权重系数,排序后看一下:
boss又说,年轻人更有活力,年龄大的放在后面吧,把年轻人放前面
那么,我们再改一下排序:
mList.Sort((x, y) => -x.Salary.CompareTo(y.Salary)*2+x.Age.CompareTo(y.Age));
看明白了吧?很简单,需要降序排列的,只需要在前面放个“-”,需要升序排列的,前面放个“+”