對ArrayList的自定義元素進行排序
ArrayList的Sort(IComparer)方法使用指定的比較器對整個 ArrayList 中的元素進行排序。向ArrayList中新增的自定義元素,當需要排序時,需要公開比較元素方法。
以下是一個例子。
先宣告需要新增到ArrayList的自定義元素型別one:
public class One
{
public string N;
public int I;
public One(string n, int i)
{
N = n;
I = i;
}
}
公開比較元素方法:
ArrayList 比較元素時要使用 IComparer 實現。以下是三個比較器
比較器oneIComparer1實現比較兩個One(按照One.N的升序排列)
public class oneIComparer1 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return string.Compare(((One)x).N,((One)y).N);
}
}
比較器oneIComparer2實現比較兩個One(按照One.N的降序排列)
public class oneIComparer2 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return string.Compare(((one)y).N,((one)x).N);
}
}
比較器oneIComparer3實現比較兩個One(按照One.I的升序排列)
public class oneIComparer3 : IComparer
{
int IComparer.Compare( Object x, Object y )
{
return ((One)x).I.CompareTo(((One)y).I);
}
}
ArrayList list = new ArrayList();
//向list新增三個型別為One的元素
list.Add(new One("a1",999));
list.Add(new One("a2",998));
list.Add(new One("a3",997));
//建立自定義比較器comparer1
comparer1 = new oneIComparer1();
//按照自定義比較器comparer1對list中的元素排序(升序排列)
list.Sort(comparer1);
//使用比較器comparer1在整個已排序的 list 中搜索One.N的值為"a3"的元素從零開始的索引。
list.BinarySearch(new One("a3",0),comparer1) 的值為2
//按照One.N的降序排列後搜尋One.N的值為"a3"的元素從零開始的索引。
comparer2 = new oneIComparer2();
list.Sort(comparer2);
list.BinarySearch(new One("a3",0),comparer2) 的值為0
//搜尋One.I的值為997的元素從零開始的索引。
comparer3 = new oneIComparer3();
list.Sort(comparer3);
list.BinarySearch(new One("",997),comparer3) 的值為0
為了程式碼更加清晰,並容易理解,可以給One新增一個建構函式
public One(string n)
{
N = n;
}
list.BinarySearch(new One("a3",0),comparer1)可改為:
list.BinarySearch(new One("a3"),comparer1)