一、题目:c#实现对象集合排序
二、功能说明:对象集合排序
三、设计流程:
1、假设存在一个Student类,包含grade和ID属性,在客户端中创建List保存多个实例,希望对List中的内容根据grade和ID参数进行排序,排序规则为,先按姓名升序排序,如果姓名相同再按年龄的升序排序
2、对grade类继承IComparable接口,实现CompareTo()方法
该方法为系统默认的方法,单一参数时会默认进行升序排序。但遇到多参数(grade、ID)排序时,我们需要对该默认方法进行修改。
3、Student类继承IComparable接口,实现CompareTo()方法
IComparable:定义由值类型或类实现的通用比较方法,旨在创建特定于类型的比较方法以对实例进行排序。
原理:自行实现的CompareTo()方法会在list.Sort()内部进行元素两两比较,最终实现排序
四、关键源码展示:
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;
}
public int CompareTo(object obj)
{
if(obj is Student)
{
Student stu = (Student)obj;
if (this.grade < stu.grade)
return 1;
else if (this.grade > stu.grade)
return -1;
else
{
return 0;
}
}
return 0;
}
}
internal class Program
{
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 s in students)
{
Console.WriteLine(s.grade + " " + s.mysubject + " " + s.myID);
}
}
}
}
五、源码开发地址