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 -*- # 输入三 ...
随机推荐
- 分布式存储Memcache替代Session方案
PHP自带的Session实际是在服务器中为每个客户建立独立的文件存放各自的信息. 在不做处理的情况下,很容易被客户端伪造.并且由于采用文件形式,所以存在着IO 读写的瓶颈.一般当用户在线达到1000 ...
- Kernel 中的 GPIO 定义和控制
最近要深一步用到GPIO口控制,写个博客记录下Kernel层的GPIO学习过程! 一.概念 General Purpose Input Output (通用输入/输出)简称为GPIO,或 总线扩展器. ...
- SpannableStringBuilder 和 SpannableString
EditText: 通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等等,如何在android中也做到这样呢? 记得andr ...
- [selenium webdriver Java]处理弹出窗口
Selenium WebDriver测试弹出窗口,包括识别弹出窗口,将driver转到新的窗口,在新的串钩中执行而是步骤,然后再转换到最初的窗口. 通过名称(name)识别和处理: Selenium ...
- 【译】 AWK教程指南 附录C-AWK的内建函数
C.1 字串函数 index( 原字串, 查找的子字串 ) 若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0. 例如: $ awk 'BEGIN{ p ...
- cubla sample-code
cublasSscal //Example 1. Application Using C and CUBLAS: 1-based indexing #include <stdlib.h> ...
- POJ 3419 Difference Is Beautiful(RMQ变形)
题意:N个数,M个询问,每个询问为一个区间,求区间最长连续子序列,要求每个数都不同(perfect sequence,简称PS). 题解:很容易求出以每个数为结尾的ps,也就是求区间的最大值.有一个不 ...
- 10段实用的HTML5代码
1.HTML5编写的CSS ResetCSS Reset也可以写成Reset CSS,即重设浏览器样式. /* html5doctor.com Reset Stylesheet (Eric Mey ...
- Java深度遍历文件夹(递归实现)
package FileDemo; import java.io.File; public class DeepSearchDir { /** * @param args */ public stat ...
- 写的非常好的文章 C#中的委托,匿名方法和Lambda表达式
简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Fir ...