C#中对泛型集合元素使用List.Sort()方法排序
啊!终于整明白了!
今天拿出一点时间研究了一下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));
看明白了吧?很简单,需要降序排列的,只需要在前面放个“-”,需要升序排列的,前面放个“+”