c# 使用 IComparable 接口对数组进行排序

c# Sorting an array with IComparable Interface

我有一个包含 5 个作业的 jobArray 数组,其中包含一个 descriptionhours needed to complete 和一个 hourly pay that a user enters

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

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

这是我的jobclass

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;

    }

total fees 打印出来时,我不确定如何对 jobs 进行排序。

当您覆盖 "compareTo" 方法时,如果您调用 "sort",则会自动调用覆盖的方法。

这是微软的一个很好的数组示例。 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();

尝试如下给出的 CompareTo 函数:

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

然后调用你的方法。

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,就会自动调用JobclassCompareTo,而不是对象 class。 另请注意,我使用了通用版本 IComparable<Job>,而不是 IComparable,以避免不必要的类型转换