.NET 2007-07-09 10:48:20 閱讀756 評(píng)論0 字號(hào):大中小 訂閱
我看見網(wǎng)上有人用IComparer接口實(shí)現(xiàn)ArrayLIst 的排序問題 ,于是自己寫了個(gè)小例子,編譯已經(jīng)通過,和大家一塊分享。有不足之處,望不吝指正。
1、建一個(gè)結(jié)構(gòu)雇員的結(jié)構(gòu)
private struct Eployee{
public string name;
public int age;
public string sex;
}
2、新建3個(gè)"雇員"
Eployee ep1=new Eployee();
ep1.name="小張";
ep1.age=21;
ep1.sex="男";
Eployee ep2=new Eployee();
ep2.name="老李";
ep2.age=43;
ep2.sex="男";
Eployee ep3=new Eployee();
ep3.name="施施";
ep3.age=18;
ep3.sex="男";
3、將3個(gè)"雇員" 加入"雇員列表";
ArrayList EmployeeList=new ArrayList();
EmployeeList.Add(ep1);
EmployeeList.Add(ep2);
EmployeeList.Add(ep3);
好了一切準(zhǔn)備就緒,現(xiàn)在希望EmployeeList中得"雇員"是按年齡排序的。
ArrayList 提供了我們現(xiàn)成的排序方法Sort();
它有三個(gè)重載,不管使用哪一個(gè),至少要你提供一個(gè)Comparer:IComparer;來告訴Sort方法 你對(duì)"雇員"們的排序依據(jù)。
這個(gè)Comparer必須實(shí)現(xiàn)接口:System.Collections.IComparer ,該接口只有一個(gè)成員函數(shù)需要你去實(shí)現(xiàn)。
描述如下:
[C#]
int Compare(
object x,
object y
);
[JScript]
function Compare(
x : Object,
y : Object
) : int;
知道了這些那我們來實(shí)現(xiàn)一個(gè)吧
private class myEmployeeCompare:System.Collections.IComparer {
public int Compare(object x,object y){
return ((Eployee)x).age-((Eployee)y).age;
}
}
因?yàn)槲覀儽容^的是“雇員”的age,所以我們可以放心的寫實(shí)現(xiàn)語(yǔ)句
return ((Eployee)x).age-((Eployee)y).age;
myEmployeeCompare EmployeeCompare=new myEmployeeCompare();
ok現(xiàn)在我們可以對(duì)"雇員"們按年齡排序了
EmployeeList.Sort(EmployeeCompare);
源碼:
using System;
using System.Collections;
class ArrayListT{
private struct eployee
{
public string name;
public int age;
public string sex;
}
ArrayListT(){}
class eployeeCompare: System.Collections.IComparer
{
public int Compare(object x,object y)
{
return ((eployee)x).age - ((eployee)y).age;
}
}
public static void Main()
{
eployee ep1 = new eployee();
ep1.name = "小張";
ep1.age = 21;
ep1.sex = "女";
eployee ep2 = new eployee();
ep2.name = "小李";
ep2.age = 20;
ep2.sex = "女";
eployee ep3 = new eployee();
ep3.name = "小王";
ep3.age = 26;
ep3.sex = "女";
ArrayList list = new ArrayList();
list.Add(ep1);
list.Add(ep2);
list.Add(ep3);
eployeeCompare eployee = new eployeeCompare();
list.Sort(eployee);
foreach (eployee ep in list)
{
Console.WriteLine("the eployee's name is :{0} age is{1}",ep.name,ep.age);
}
Console.ReadLine();
}
}
聯(lián)系客服