C#_IComparer实例 - 实现ID或者yearOfscv排序

调用LIST的Sort的时候会调用IComparer的默认实现,quicksort会调用每个元素的CompareTo的IComparable实现


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ComparerTest
{
    class Employee : IComparable<Employee>
    {
        private int empID;
        private int yearOfSvc = 1;

        public Employee(int empID)
        {
            this.empID = empID;
        }

        public Employee(int empID, int yearOfSvc)
        {
            this.empID = empID;
            this.yearOfSvc = yearOfSvc;
        }

        public override string ToString()
        {
            return "ID: " + empID.ToString()
                + "  yearOfSvc: " + yearOfSvc.ToString();
        }

        public bool Equals(Employee other)
        {
            if (this.empID == other.empID)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //获取Comparer对象的静态方法
        public static EmployeeComparer GetComparer()
        {
            return new Employee.EmployeeComparer();
        }
        //比较委托回Employee
        //Employee使用整形的默认
        //CompareTo方法
        public int CompareTo(Employee rhs)
        {
            return this.empID.CompareTo(rhs.empID);
        }


        //自定义Comparer要调用的特殊表现
        public int CompareTo(Employee rhs,
            Employee.EmployeeComparer.ComparisonType whichComparision)
        {
            switch (whichComparision)
            { 
                case Employee.EmployeeComparer.ComparisonType.EmpID:
                    return this.empID.CompareTo(rhs.empID);
                case Employee.EmployeeComparer.ComparisonType.Yrs:
                    return this.yearOfSvc.CompareTo(rhs.yearOfSvc);
            }
            return 0;
        }

        //实现IComparer的内嵌类
        public class EmployeeComparer : IComparer<Employee>
        {
            private Employee.EmployeeComparer.ComparisonType whichComparision;

            public enum ComparisonType
            {
                EmpID,
                Yrs
            };

            public bool Equals(Employee lhs, Employee rhs)
            {
                return this.Compare(lhs, rhs) == 0;
            }
            //让Empolyee对象自己比较
            public int Compare(Employee lhs, Employee rhs)
            {
                return lhs.CompareTo(rhs, WhichComparison);
            }

            public int GetHashCode(Employee e)
            {
                return e.GetHashCode();
            }

            public Employee.EmployeeComparer.ComparisonType WhichComparison
            {
                set
                {
                    whichComparision = value;
                }
                get 
                {
                    return whichComparision;
                }

            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Employee> empArray = new List<Employee>();

            Random ra = new Random();

            for (int i = 0; i < 5; i++)
            {
                empArray.Add(new Employee(ra.Next(10)+100,ra.Next(20)));
            }

            for (int i = 0; i < empArray.Count; i++)
            {
                Console.Write("\n{0}",empArray[i].ToString());
            }
            Console.WriteLine();
            Console.WriteLine();
            Employee.EmployeeComparer c =  Employee.GetComparer();

            c.WhichComparison = Employee.EmployeeComparer.ComparisonType.EmpID;

            empArray.Sort(c);

            for (int i = 0; i < empArray.Count; i++)
            {
                Console.Write("\n{0}", empArray[i].ToString());
            }
            Console.WriteLine();
            Console.WriteLine();
            Employee.EmployeeComparer c2 = Employee.GetComparer();

            c.WhichComparison = Employee.EmployeeComparer.ComparisonType.Yrs;

            empArray.Sort(c2);

            for (int i = 0; i < empArray.Count; i++)
            {
                Console.Write("\n{0}", empArray[i].ToString());
            }
            Console.ReadLine();
        }
    }
}


 

 

转载于:https://www.cnblogs.com/MarchThree/p/3720473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值