[Windows程序设计作业2]C#对象集合如何排序(IComparable接口)

本文介绍了如何在CSharp中设计一个学生类,包含考试成绩、科目和学号属性,并实现根据成绩对学生对象集合进行排序。通过实现IComparable接口和CompareTo方法,以成绩由高到低进行排序,文章还提到了Java和Python集合的不同之处以及优化的泛型实现。
摘要由CSDN通过智能技术生成

目录

功能说明:

设计流程:

关键源码展示:

总结:


功能说明:

设计一个学生类,属性如下:考试成绩mygrade、考试课目和学号

根据课程成绩将学生对象集合进行了排序

(PS:据笔者所知,java与python的貌似集合不允许有重复元素,而CSharp允许)

设计流程:

下面为Student类内部的具体实现排序的逻辑

关键源码展示:

具体比较代码CompareTo,写在Student类内部


    public int CompareTo(object obj)
    {
        if (obj is Student)
        { 
            Student student = obj as Student;
            //return mygrade.CompareTo(student.mygrade);此代码为默认排序方式,小的排在前面
            //下面代码能把大的排在前面
            if (this.mygrade > student.mygrade)
                return -1;
            else if (this.mygrade < student.mygrade)
                return 1;
            else
                return 0;
        }else
            throw new ArgumentException("比较对象不是Student类");
    }

主函数:

存储方式是对象数组,比较时直接调用Array.Sort并把对象数组传进去


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);
        Console.WriteLine("下面是成绩由高到低排序:");
        foreach (Student student in students)
        {
            Console.WriteLine("成绩:{0}  课程:{1}  学号: {2}",student.mygrade,student.mysubject,student.myID);
        }
    }
}

总结:

在引用类型(具有多个字段)排序时,我们可以继承IComparable接口,同时实现int CompareTo(object obj)方法,来实对对象的排序。

同时,return值为-1,0,1,具体含义如下

拓展:

避免拆箱装箱操作,IComparable支持泛型

相关代码可以修改为:


public class Student : IComparable<Student>

public int Compare(Student student)

实现效果截图:

源码开源地址:

Github源代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏目艾拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值