一、功能说明
构造一个学生类,其中包括成绩、科目和学号,请根据课程成绩grade将学生进行由小到大的排序。
二、设计流程
先构造一个学生类,针对该对象本身实现IComparable接口,根据当前学生与需比较学生的进行大小比较,若当前学生成绩大于要比较学生成绩则返回-1,若当前学生成绩小于要比较学生成绩则返回1,若相等则返回0,通过返回值反映大小关系。
三、关键源码展示
学生类
public class Student : IComparable
{
public double mygrade;
public string mysubject, myID;
public Student() { }
public Student(double grade, string subject, string id)
{
mygrade = grade;
mysubject = subject;
myID = id;
}
int IComparable.CompareTo(Object obj)
{
if(obj is Student)
{
Student s = (Student)obj;
if(this.mygrade > s.mygrade)
{
return 1;
}
else if(this.mygrade < s.mygrade)
{
return -1;
}
else
{
return 0;
}
}
throw new ArgumentException("object is not a Student");
}
}
主函数
private static void Main(string[] args)
{
Student[] students = new Student[5];
students[0] = new Student(50.0, "windows程序设计", "001");
students[1] = new Student(90.0, "windows程序设计", "002");
students[2] = new Student(100.0, "windows程序设计", "003");
students[3] = new Student(70.0, "windows程序设计", "004");
students[4] = new Student(80.0, "windows程序设计", "005");
Array.Sort(students);
foreach(Student student in students)
{
Console.WriteLine(student.mygrade + "," + student.mysubject + "," + student.myID);
}
}
运行结果
四、总结
对于对象集合如何排序问题,在使用IComparable接口时,必须保证至少具有一个CompareTo()成员,IComparable接口本身就是为了根据业务需求,统一对象某一属性的比较,通过返回-1,1,0来反映大小,在解决此类问题上大大方便了任意比较一个类中的两个对象。
五、源码开源地址
https://gitee.com/BlingQD_0/windows-job-w/blob/master/Program.cs