• C#_IComparer实例


    调用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("
    {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("
    {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("
    {0}", empArray[i].ToString());
                }
                Console.ReadLine();
            }
        }
    }
    


  • 相关阅读:
    Hadoop 0.23.1 Release Notes
    maven编译参数
    Hadoop快速入门
    HTML Parser HTML Parser
    EasyHadoop v1.0
    Hudson+Maven+SVN 快速搭建持续集成环境
    对技术要有足够的尊重和敬畏
    hudson设置
    python之强大的日志模块 竹叶青 的专栏 博客频道 CSDN.NET
    PHP学习之七:错误控制运算符
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720473.html
Copyright © 2020-2023  润新知