您的位置:首页 > 编程语言 > C#

在C#中遍历和排序对象集合

2010-04-08 16:06 295 查看
原文地址:http://www.dingos.cn/index.php?topic=2007.0

using System;
using System.Collections;

//Class Employee
class Employee {
public string EmpName;
public string Dept;

public Employee(string szName, string szDept) {
EmpName = szName;
Dept = szDept;
}
}

//Declare the class to be implement IEnumerable
//Employees class contains the Employees list and enumeration will result in going thru employees
class Employees {
//Declare a member of Employees
public ArrayList oEmployees;

//Constructor for Employees
public Employees() {
oEmployees = new ArrayList();
}

//Declare a enumerator member
class EnumEmployee : IEnumerator {
//Declare a variable to hold current index
//Declare a variable of Enumerable class that is Employee
public int CurrentIndex;
public Employees oEmpList;

//Constructor
public EnumEmployee(Employees oEmps) {
oEmpList = oEmps;
CurrentIndex = -1;
}

//Declare a method to get the current employee
// Mandatorily implemented...Dont change the name
public object Current {
get {
return oEmpList.oEmployees[CurrentIndex];
}
}

//Handle movenext : Mandatorily implemented...Dont change the name
public bool MoveNext() {
if(CurrentIndex < oEmpList.oEmployees.Count - 1) {
CurrentIndex++;
return true;
} else
return false;
}

//Reset the variable : Mandatorily implemented...Dont change the name
public void Reset() {
CurrentIndex = -1;
}
}

//Class for Comparison
//Member for sort order
public enum EmployeeSortOrder { eSortNameDesc, eSortNameAsc, eSortDeptDesc, eSortDeptAsc };
class EmployeesSort : IComparer {
//Sort order
private int SortOrder;

//Constructor
public EmployeesSort(int Sort) {
SortOrder = Sort;
}

//Implement Compare function
public int Compare(object oEmployee1, object oEmployee2) {
switch(SortOrder) {
case (int)EmployeeSortOrder.eSortNameDesc:
return ((Employee)(oEmployee2)).EmpName.CompareTo(
((Employee)(oEmployee1)).EmpName);
case (int)EmployeeSortOrder.eSortNameAsc:
return ((Employee)(oEmployee1)).EmpName.CompareTo(
((Employee)(oEmployee2)).EmpName);
case (int)EmployeeSortOrder.eSortDeptDesc:
return ((Employee)(oEmployee2)).Dept.CompareTo(
((Employee)(oEmployee1)).Dept);
case (int)EmployeeSortOrder.eSortDeptAsc:
return ((Employee)(oEmployee1)).Dept.CompareTo(
((Employee)(oEmployee2)).Dept);
default:
return ((Employee)(oEmployee1)).EmpName.CompareTo(
((Employee)(oEmployee2)).EmpName);
}
}
}

//Write a function to get the enumerator
public IEnumerator GetEnumerator() {
return new EnumEmployee(this);
}

//Write a function to call sort
public void SortEmployees(int SortType) {
oEmployees.Sort(new EmployeesSort(SortType));
}

//Now.....use the enumeration :-))
public static void Main() {
Employee oTemp;

//Create the Employees class
Employees oEmpList = new Employees();

//Add Employees to the oEmployees member
oEmpList.oEmployees.Add(new Employee("Lalitha", "SE"));
oEmpList.oEmployees.Add(new Employee("Lal", "Associate"));
oEmpList.oEmployees.Add(new Employee("KLA", "Executive"));

//Now....loop using foreach
Console.WriteLine("Using ForEach");
Console.WriteLine("----- -------");

foreach(Employee oEmp in oEmpList.oEmployees)
Console.WriteLine(oEmp.EmpName);

//Sort the Employees list
oEmpList.SortEmployees(1);

//Alright....Try enumeration...
//Get the enumerator and start enumeration
IEnumerator e = oEmpList.GetEnumerator();

Console.WriteLine("/n/n Using Enumerator");
Console.WriteLine("----- ----------/n");
while(e.MoveNext()) {
oTemp = (Employee)(e.Current);
Console.WriteLine(oTemp.EmpName + " " + oTemp.Dept);
oTemp = null;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐