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();
}
}
}
C#_IComparer实例 - 实现ID或者yearOfscv排序的更多相关文章
- php实例根据ID删除mysql表中的数据
在动态网站开发中,我们经常要根据ID删除表中的数据,例如用户删除帖子,就需要根据ID删除帖子.本文章向大家介绍php根据ID删除表中数据的实例,需要的朋友可以参考一下本文章的实例. php实例根据ID ...
- liferay中如何获取实例的id和portletId
在Portlet中request分为两种renderRequet和actionRequest而portlet需要取得实例Id的时候都在renderRequest的时候才可以取到,如下例子 Portle ...
- C#_IComparable实例 - 对象ID进行排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Comp ...
- java学习--自定义类的实例的大小比较和排序
我们知道Object类有一个equals方法,用于比较两个对象是否相等 我们只要在自定义类中重写了equals方法(若不重写就是比较两个实例的地址,相当于==)就可以用来比较该类的两个实例是否相等 问 ...
- 如何将RAC数据库的 RMAN Disk 备份 Restore 到另一个节点上的单个实例 (Doc ID 415579.1)
HowTo Restore RMAN Disk backups of RAC Database to Single Instance On Another Node (Doc ID 415579.1) ...
- 让mysql返回的结果按照传入的id的顺序排序
比如id为 1,3,5,44,66,32,21,6 那么返回的结果顺序也是这个顺序 $sql = "select * from ".$this->tableName(). ...
- mysql 对数据的自增ID重新进行排序
创建表格时添加: create table table1(id int auto_increment primary key,...) 创建表格后添加: 删除原有主键: ALTER TABLE `ta ...
- [C][代码实例]整型数组二分排序
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- 【Python】【demo实验9】【练习实例】【三数排序】
原题: 输入三个整数x,y,z,请把这三个数由小到大输出. 我的解法: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- # 输入三 ...
随机推荐
- Struts2的struts.properties文件在哪儿啊?
老师教我们Struts2的时候叫我们建了个Struts.xml文件啊?那struts.properties呢?不需要吗? 回答1: struts.properties 是可以不要的!!!因为 stru ...
- BigRender
当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片的延迟加载.一个庞大 ...
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.8
For any matrix $A$ the series $$\bex \exp A=I+A+\frac{A^2}{2!}+\cdots+\frac{A^n}{n!}+\cdots \eex$$ c ...
- error: Setup script exited with error: Unable to find vcvarsall.bat
安装mxnet python版本时遇到“Unable to find vcvarsall.bat”错误搜索一下后查到如下方法: python 3.5.2版本依赖高版本的vs解决办法是安装vs2015的 ...
- javascript设计模式3
门户大开式对象 var Book=function(isbn,title,author){ if (isbn==undefined) throw new Error("不合法"); ...
- 7.OpenACC
OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...
- 常用Raspberry Pi周边传感器的使用教程
在Raspberry Pi 的使用和开发过程中,你可能时常需要一些硬件和传感器等来支持你的开发工作,例如,加入一个超声波测距的模块来让你的Raspberry Pi具备测距功能,加入一个测温模块以实现测 ...
- Enterprise Suse运维
1,Suse CDH4安装 wget archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_ ...
- Android实例-解决启动黑屏问题(XE8+小米2)
结果: 1.在启动时马上出现图片界面,但在出现程序界面前会有黑屏,大约有0.2秒左右. 实现: 1.建立2个文件:loading.png和styles.xml: ①其中loading.png是启动时替 ...
- nyoj 129 树的判定
并查集+欧拉 树的判定 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 A tree is a well-known data structure that is e ...