使用icomable接口对数组进行排序

本文关键字:排序 数组 icomable 接口 使用 | 更新日期: 2023-09-27 18:09:53

我有一个包含description, hours needed to completehourly pay that a user enters的5个作业的jobArray数组。

我需要按总费用(hours * hourly pay)的升序对数组进行排序。

分配要求我在这样做时使用IComparable interface,但我不确定如何使用它。如有任何帮助,不胜感激,谢谢。

这是我的job

class Job : IComparable
{
    public Job(string description, int hours, double hourRate, double fee)
    {
        Description = description;
        hoursToComplete = hoursToComplete;
        hourlyRate = hourlyRate;
        totalFee = totalFee;
    }

这是我用来比较totalFees

的接口
    public int CompareTo(Job o)
    {
        int returnVal;
        Job temp = (Job)o;
        if (this.totalFee > temp.totalFee)
            returnVal = 1;
        else
            if (this.totalFee < temp.totalFee)
                returnVal = -1;
            else
                returnVal = 0;
        return returnVal;
    }

我不确定从这里做什么来排序jobs当它们被total fees打印出来。

使用icomable接口对数组进行排序

当您重写"compareTo"方法时,如果您调用"sort",则会自动调用被重写的方法。

这是一个来自microsoft的关于数组的好例子。https://support.microsoft.com/en-us/kb/320727

下面是LIST

的一个示例(伪代码)
List<Job> list = new List<Job>();
list.Add(new Job() { //Intialize arguments });
list.Add(new Job() { //Intialize arguments });
list.Add(new Job() { //Intialize arguments });
list.Add(new Job() { //Intialize arguments });
list.Add(new Job() { //Intialize arguments });
// Uses IComparable.CompareTo()
list.Sort();

这是你的代码的工作版本:

class Job : IComparable<Job>
{
    public string Description { get; set;}
    public int HoursToComplete { get; set;}
    public double HourlyRate { get; set;}
    public double TotalFee { get; set;}
    public Job(string description, 
               int hoursToComplete, 
               double hourlyRate, 
               double totalFee)
    {
        Description = description;
        HoursToComplete = hoursToComplete;
        HourlyRate = hourlyRate;
        TotalFee = totalFee;
    }
    public int CompareTo(Job otherJob)
    {
        int returnVal;
        if (this.TotalFee > otherJob.TotalFee)
            returnVal = 1;
        else
            if (this.TotalFee < otherJob.TotalFee)
            returnVal = -1;
        else
            returnVal = 0;
        return returnVal;
    }
}

既然你已经实现了IComparable<Job>,那么在给定的List<Job>上,只需调用Sort,它将自动调用JobCompareTo,而不是对象类。还请注意,我使用了通用版本IComparable<Job>,而不是IComparable,以避免不必要的类型转换

试试下面给出的CompareTo函数:

public int CompareTo(object obj)
{
     job tempList = (job)obj;
     return tempList.totalFee.CompareTo(totalFee);
}

然后调用你的方法。

list.Sort()