实现两个对象的比较有两种方法:
1.定义比较器Comparer。
2.实现IComparable
2.实现IComparable
假设我们要排序的类是Stu,定义如下:
public
class
Stu
{
public string Class;
public int Code;
public int Age;
}
{
public string Class;
public int Code;
public int Age;
}
对于1:
我们新建一个Stu比较器:
public
class
StuCmpr : IComparer
<
Stu
>
{
public enum Order { Class, Age, Code }
public Order oder;
public int Compare(Stu a, Stu b)
{
switch (oder)
{
case Order.Age:
return a.Age.CompareTo(b.Age);
case Order.Class:
return a.Class.CompareTo(b.Class);
case Order.Code:
return a.Code.CompareTo(b.Code);
default :
return a.Code.CompareTo(b.Code);
}
}
}
{
public enum Order { Class, Age, Code }
public Order oder;
public int Compare(Stu a, Stu b)
{
switch (oder)
{
case Order.Age:
return a.Age.CompareTo(b.Age);
case Order.Class:
return a.Class.CompareTo(b.Class);
case Order.Code:
return a.Code.CompareTo(b.Code);
default :
return a.Code.CompareTo(b.Code);
}
}
}
在比较器中,我们定义了按照Age,Code,Class排序的三种case,已实现按照不同的字段排序。
Usage:
StuCmpr cmp = new StuCmpr();//新建比较器
cmp.oder = StuCmpr.Order.Age;//设置比较器的排列字段
cmp.oder = StuCmpr.Order.Age;//设置比较器的排列字段
Random rand=new Random();<Stu> stus = new List<Stu>();
for (int i = 0; i < 10; i++)
{
Stu stu = new Stu();
stu.Age = rand.Next(0,15);
List
stus.Add(stu);
}
stus.Sort(cmp);//排序
stus.Sort(cmp);//排序