C#_IComparer实例 - 实现ID或者yearOfscv排序
2013-09-11 01:23
225 查看
调用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(); } } }
相关文章推荐
- C#中如何判断实例是否继承了某个父类或者实现了某类接口
- C#_IComparable实例 - 对象ID进行排序
- C#中的IComparable 和 IComparer 接口,实现列表中的对象比较和排序
- [原创]详述IComparer,IComparable接口,实现自定义方法比较对象大小并排序(C#)
- java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序)
- C# 实现List实例中实例元素的排序
- C# List<> 实现 IComparer 接口 排序
- C# usb Hid 访问上位机USB通讯实例 实现设备在线或者离线和发送接收数据通讯功能
- 在C#中实现I/O完成端口(包括类定义和测试实例)
- C#中通过API实现的打印类 实例代码
- 效率最好的排序,用C#实现(面试会考,必须搞懂)
- C#实现Log4Net日志分类和自动维护实例
- JQuery实现带排序功能的权限选择实例
- 利用thrift实现js与C#通讯的实例代码
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- C#实现的3种排序算法--冒泡排序、选择排序、插入排序
- C# ListView 点击表头对数据进行排序功能的实现代码
- C#利用Mutex实现只运行一个程序实例
- C#:ListView控件如何实现点击列表头进行排序?
- C#基础---IComparable用法,实现List<T>.sort()排序