问题:如何实现对象集合的比较
前言
题目描述:
- 题目说明:学生类包括成绩、科目和学号,请根据课程成绩grade将学生进行排序。
- 部分代码如下,请将代码补充完整
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;
}
请在此处添加关键代码···
}
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");
请在此处添加关键代码···
}
}
一、函数重载
函数重载是一种特殊情况,C(++/#)允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题.在C(++/#)中不仅函数可以重载,运算符也可以重载。
但是要注意在C#中重载需要将方法声明成静态
二、具体实现
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace overload
{
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 void show_stu()
{
Console.WriteLine("成绩:{0},科目:{1},学号:{2}", mygrade, mysubject, myID);
}
public static bool operator > (Student b, Student c)
{
return b.mygrade > c.mygrade;
}//重载>号
public static bool operator <(Student b, Student c)
{
return b.mygrade < c.mygrade;
}//重载<号
public void quick_sort(Student[] student, int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1;
Student x = student[l + r >> 1];
while (i < j)
{
do i++; while (student[i] < x);
do j--; while (student[j] > x);
if (i < j)
{
Student tmp = student[i];
student[i] = student[j];
student[j] = tmp;
}
}
quick_sort(student, l, j);
quick_sort(student, j + 1, r);
}//根据成绩快速排序
//请在此处添加关键代码···
}
public class IComparable
{
}
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");
students[0].quick_sort(students, 0, 4);
for(int i = 0;i< students.Length;i++)
{
students[i].show_stu();
}
//请在此处添加关键代码···
}
}
}
运行结果:
总结
总的来说C#中的重载和C++中几乎无异,但是要注意要声明位静态。实现对象的比较要重载运算符,然后就可以根据自己设定要比较对象进行排序,至于排序就很简单了,冒泡、快速、归并等排序都可以实现,我这里使用的是快速排序。