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

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

        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜晚回家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值