ICmparable
class Person:IComparable
{
public int ID;
public string Rank;
//构造函数,初始化时就会分析
public Person(int id,string rank)
{
this.ID = id;
this.Rank = rank;
}
public int CompareTo(object obj)
{
Person person = (Person)obj;
return this.ID.CompareTo(person.ID);
}
}
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(new Person(6,"排长"));
list.Add(new Person(3,"团长"));
list.Add(new Person(4,"司令"));
list.Add(new Person(5,"旅长"));
list.Add(new Person(7,"连长"));
list.Add(new Person(1,"军长"));
list.Add(new Person(2,"营长"));
list.Add(new Person(8,"班长"));
list.Sort();
Console.WriteLine("After sorting!");
foreach(Person person in list)
{
Console.WriteLine("ID:"+person.ID.ToString()+",Rank:"+person.Rank);
}
}
}
输出的结果为:
After sorting!
ID:1,Rank:军长
ID:2,Rank:营长
ID:3,Rank:团长
ID:4,Rank:司令
ID:5,Rank:旅长
ID:6,Rank:排长
ID:7,Rank:连长
ID:8,Rank:班长
IComparer
角色的 IComparer 旨在提供其他比较机制。 例如, 您可能希望提供排序是按几个字段或属性, 类升序和降序对同一字段, 或两者
使用 IComparer 是一个两步过程。 首先, 声明类实现 IComparer , 并然后实现 Compare 方法:
private class sortYearAscendingHelper : IComparer { int IComparer.Compare(object a, object b) { car c1=(car)a; car c2=(car)b; if (c1.year > c2.year) return 1; if (c1.year < c2.year) return -1; else return 0; } }
注意 IComparer.Compare 方法要求第三级比较。 1, 0 或 - 1 是返回根据一个值是大于、, 等于或小于另一个。 通过此方法中切换逻辑运算符更改排序次序 (升序或降序)。
第二步是要返回您 IComparer 对象的一个实例方法声明:
public static IComparer sortYearAscending()
{
return (IComparer) new sortYearAscendingHelper();
}
使用 IComparer 不仅限于数组。 它被接受多种不同集合和控件类中以参数形式。