代码如下:
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