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));

看明白了吧?很简单,需要降序排列的,只需要在前面放个“-”,需要升序排列的,前面放个“+”

就这样,收工!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值