在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;
}
}
}
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;
}
}
}
相关文章推荐
- .NET/C#中对自定义对象集合进行自定义排序的方法
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- .NET/C#中对自定义对象集合进行自定义排序的方法
- wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合
- JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序
- More Effective C# 第21条、第22条 实例代码解析(可比较 可排序 自定义对象集合完整演示) IEquatable, IComparable,IEnumerable
- C#中对List<Object>泛型集合,根据对象的某一属性进行升序排序
- 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
- C#中List或其它集合对象排序方法的一点理解
- .NET/C#中对自定义对象集合进行自定义排序的方法
- 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
- collections 接口存储一组不唯一,无序的对象。提供了对集合进行排序,遍历等对种算法的实现
- .NET/C#中对自定义对象集合进行自定义排序的方法
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序)
- jquery 遍历对象、数组、集合_项海军_新浪博客
- 19-集合框架工具类-13-常用对象API(集合框架-工具类-Collections-排序)
- Java集合对象排序
- 对象集合排序(需要implements Comparable)
- C#集合Dictionary中按值的排序
- C#从实体对象集合中导出Excel的代码