2016-10-03 21 views
1

我有一個jobArray數組,其中包含一個description,hours needed to complete,hourly pay that a user enters的5個作業。c#使用IComparable接口對數組排序

我需要按總費用(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

+0

我認爲你做得對。現在只需將該類的對象添加到列表中並使用sort()方法。 –

+0

你的代碼不會編譯。您的代碼中有許多與IComparable或排序無關的明顯錯誤。在嘗試做更復雜的事情之前,您應該先嚐試修復它。 – Vijay

回答

2

這裏是你的代碼的工作版本:

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,以避免不必要的類型轉換

+0

謝謝。當我打印數組時,我會打電話嗎?當我嘗試調用.sort時,它不會出現在智能感知中。 – John

+0

調用'ArrayObject.ToList()',然後調用列表中的'Sort' –

+0

您可以將CompareTo簡化爲單行。 'return this.TotalFee - otherJob.TotalFee' – Vijay

2

重寫「compareTo」方法時,如果調用「sort」,則會自動調用overrideen方法。

這是微軟陣列的一個很好的例子。 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(); 
1

嘗試的CompareTo函數,如下所示:

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

然後調用你的方法。

list.Sort()