C#中的排序

代码如下:

using System;
using System.Collections;
using System.Collections.Generic;

namespace ConsoleApplication1
{

    class Person:IComparable<Person>
    {
        public int age;
        public int grade;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="age"></param>
        /// <param name="grade"></param>
        public Person(int age, int grade)
        {
            this.age = age;
            this.grade = grade;
        }

        /// <summary>
        /// 比较函数,按照年龄升序,成绩降序排列
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public int CompareTo(Person other)
        {
            int result = 0;
            if(this.age < other.age)
            {
                result = -1;
            }
            else if(this.age == other.age)
            {
                if(this.grade < other.grade)
                {
                    result = 1;
                }
                else if(this.grade > other.grade)
                {
                    result = -1;
                }
            }
            else
            {
                result = 1;
            }

            return result;
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            Person p1 = new Person(19, 20);
            Person p2 = new Person(19, 30);
            Person p3 = new Person(2, 30);
            Person p4 = new Person(2, 10);
            Person p5 = new Person(3, 9);

            List<Person> list = new List<Person>();
            list.Add(p1);
            list.Add(p2);
            list.Add(p3);
            list.Add(p4);
            list.Add(p5);

            Console.WriteLine("排序之后");
            list.Sort();
            for(int i=0;i<list.Count;++i)
            {
                Console.WriteLine(list[i].age + "   " + list[i].grade);
            }
        }
    }
}

这里有一个记忆的技巧,就是,result的值取三个,分别是-1,0,1。-1表示升序,0表示相等,1表示降序。
当我们想让一个东西排在前面的时候,我们立马想到的是让result等于-1。而如果想让一个东西排在后面的话,则应该将result等于1。
比如要求按照age为升序排列,也就是越小的就靠前显示,所以this.age

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值