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

来源:互联网 发布:尤克里里推荐 知乎 编辑:程序博客网 时间:2024/05/17 21:38

原文地址: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;

        }

    }

}

原创粉丝点击