使用icomable接口对数组进行排序
本文关键字:排序 数组 icomable 接口 使用 | 更新日期: 2023-09-27 18:09:53
我有一个包含description
, hours needed to complete
和hourly 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
打印出来。
当您重写"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
,它将自动调用Job
类CompareTo
,而不是对象类。还请注意,我使用了通用版本IComparable<Job>
,而不是IComparable
,以避免不必要的类型转换
试试下面给出的CompareTo函数:
public int CompareTo(object obj)
{
job tempList = (job)obj;
return tempList.totalFee.CompareTo(totalFee);
}
然后调用你的方法。
list.Sort()