这里是要写一个对雇员的工资进行排序,但是为了以后能通过同一个方法就可以对不同的类型进行排序,就举了一个雇员类的方法,以供参考。
这里用了泛型,Func委托,冒泡排序
这里是对雇员类的定义
class Employee
{
private string name;
private int sole;//出售
public string Name { get => name; set => name = value; }
public int Sole { get => sole; set => sole = value; }
public Employee(string name, int sole)
{
this.name = name;
this.sole = sole;//出售
}
//因为是比较雇员的信息,所有就调用雇员的方法
public static bool CompareMethod(Employee e1,Employee e2)
{
//如果e1大于e2的话,返回true,否则就返回false
if (e1.sole > e2.sole) { return true; }
//这里是比较雇员之间工资的高低
return false;
}
//对类中定义的name和sole进行重写,否则会输出项目名
public override string ToString()
{
return name+" "+sole;
}
}
这里是任意类型数据进行调用的方法,其中compareMethod是调用雇员类中的比较方法。因为排序就要对数据进行比较,又不好确定是什么类型的,就要用到Func委托,这里定义的func委托是:
Func<T,T,bool>,其中bool是调用compareMethod中的
返回值,从而对数据进行比较。
//对任意类型的数据,进行排序
static void CommonSort<T>(T[] ArrySort,Func<T,T,bool> CompareMethod)//这里是调用了雇员比较方法
//用func形进行委托,两个不知道类型的参数,返回bool值类型的一个方法
{
Boolean swapped = true;
while (swapped)//为假时退出循环
{
swapped = false;//在程序for循环到最后一次时,swapped才会变为true
for (int i = 0; i < ArrySort.Length - 1; i++)//总长度的最后一个就不用排了
{
if (CompareMethod(ArrySort[i],ArrySort[i+1]))
//调用compareMethod中的比较方法
//这里也是func<T,T,bool>
{
T temp = ArrySort[i];
ArrySort[i] = ArrySort[i + 1];
ArrySort[i + 1] = temp;
swapped = true;
}
}
}
}
而最后的main函数就是,对employee进行赋值
//调用employee类,并给雇员赋值
Employee[] employees = new Employee[]
{
new Employee("a",2000),
new Employee("e",2300),
new Employee("f",4300),
new Employee("c",25300),
new Employee("h",2330),
new Employee("D",2400),
new Employee("b",3300)
};
//在main中用委托类型func
CommonSort<Employee>(employees, Employee.CompareMethod);
//遍历
//这个类型为employee
foreach (Employee e in employees)
{
Console.WriteLine(e);
}
最后输出为