说明(2017-7-24 19:15:15):

1. 百度文库里的一篇文章,觉得讲的比较好。原文地址:https://wenku.baidu.com/view/b53cd250ad02de80d4d84073.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _04IComparer示例
{
//class Program
//{
// static void Main(string[] args)
// {
// }
//}
//c#如何使用IComparer子类的Sort排序方法
//泛型的排序有3种方法,分别是:
//1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用
//2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有 2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;
//3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法
//这里介绍第三种方法:
//首先定义一个类,用作集合的元素 /// <summary>
/// 学生类
/// </summary>
public class Student
{
private string name;
// 姓名
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
// 年龄
public int Age
{
get { return age; }
set { age = value; }
}
private string grade;
// 年级
public string Grade
{
get { return grade; }
set { grade = value; }
}
//构造函数
public Student(string name, int age, string grade)
{
this.name = name;
this.age = age;
this.grade = grade;
}
public override string ToString()
{
return this.name + "," + this.age.ToString() + "," + this.grade;
}
}
//接着定义一个用于比较的类,实现IComparer<T>泛型接口:
public class StudentComparer : IComparer<Student>
{
public enum CompareType
{
Name,
Age,
Grade
}
private CompareType type;
// 构造函数,根据type的值,判断按哪个字段排序
public StudentComparer(CompareType type)
{
this.type = type;
}
#region IComparer<Student> 成员
public int Compare(Student x, Student y)
{
switch (this.type)
{
case CompareType.Name:
return x.Name.CompareTo(y.Name);
case CompareType.Age:
return x.Age.CompareTo(y.Age);
default://case CompareType.Grade:
return x.Grade.CompareTo(y.Grade);
}
}
#endregion
}
//下面就开始排序了:
public class test
{
public static void Main()
{
List<Student> arr = new List<Student>();
arr.Add(new Student("张三", , "一年级"));
arr.Add(new Student("李四", , "二年级"));
arr.Add(new Student("王五", , "一年级"));
arr.Add(new Student("陈六", , "三年级"));
arr.Add(new Student("刘七", , "二年级"));
// 调用Sort方法,实现按年龄排序
arr.Sort(new StudentComparer(StudentComparer.CompareType.Age));
// 循环显示集合里的元素
foreach (Student item in arr)
Console.WriteLine(item.ToString());
Console.WriteLine("---------------------");
// 调用Sort方法,实现按姓名排序
arr.Sort(new StudentComparer(StudentComparer.CompareType.Name));
// 循环显示集合里的元素
foreach (Student item in arr)
Console.WriteLine(item.ToString());
Console.ReadKey();
}
}
}

C#学习笔记(19)——使用IComparer(百度文库)的更多相关文章

  1. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  2. SQL反模式学习笔记19 使用*号,隐式的列

    目标:减少输入 反模式:捷径会让你迷失方向 使用通配符和未命名的列能够达到减少输入的目的,但是这个习惯会带来一些危害. 1.破坏代码重构:增加一列后,使用隐式的Insert插入语句报错: 2.查询中使 ...

  3. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

  4. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  5. Chrome扩展,应用开发学习笔记之2---恶搞百度一下

    Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...

  6. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  7. [原创]java WEB学习笔记19:初识MVC 设计模式:查询,删除 练习(理解思想),小结 ,问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. ‎Cocos2d-x 学习笔记(19) Control Invocation

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 control为其子类提供了touch回调函数,当子类触发EventType相关事件时,会调用相关的回调函数. control对象接收到的事件类 ...

  9. ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

    一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半 ...

  10. tornado学习笔记19 Tornado框架分析

    19.1 Http服务器请求处理流程图 (1) 调用HTTPServer的bind方法,绑定Socket的监听端口号: (2) 调用HTTPServer的listen方法,初始化一个listen so ...

随机推荐

  1. 【SQL】SQL 中Select语句完整的执行顺序

    SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...

  2. UIView的transform

    iOS开发UIView的transform属性详解 本文主要是详解iOS开发UIView的transform属性 CGAffineTransform实际上是一个矩阵 | a,  b,  0 | | c ...

  3. Docker未启动错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    此问题是因为Docker安装后未启动所致,执行以下命令启动docker: systemctl start docker.service 具体日志如下: Connecting to ... Connec ...

  4. 站在.NET的角度学安卓的草民笔记1

    Java           ->        .NET 安卓          ->        winform/WPF 类继承Activity  ->     类继承 For ...

  5. linux文件系统 - 初始化(一)

    术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...

  6. 利用 PowerShell 分析SharePoint WebApplication 体系结构

    之前一篇文章<两张图看清SharePoint 2013 Farm 逻辑体系结构>谈到Web Application,Content Database,Site Collection的关系. ...

  7. django -- verbose_name的对数据库层面的影响

    一.没有verbose_name时model的定义: from django.db import models # Create your models here. class Question(mo ...

  8. win 7 下合并多个表格

    首先我这里从服务器上下载了一大堆的表格 分类放好之后 这里我们需要把每一类的表格合并成一张表格 这里我们使用win 7下的copy的命令 这里我的表格的格式是csv 使用cmd 我们先cd到你的表格的 ...

  9. 奶瓶(beini)破解无线密码流程:安装、抓包、从虚拟机(VMware)拷贝握手包(拷贝到硬盘、U盘)、跑包

    1. 环境 1). Windows 7 64位版本 2). VMware 9.0.2版本 3). 奶瓶1.2.3版本(beini-1.2.3.iso) 2. 安装 2.1 安装方式一 将beini-1 ...

  10. Universal USB Installer集开源软件之佳作

    有机会下载一份uui的源代码,翻看了一下,呵呵,有意思,几乎是一个开源软件的大杂烩,忽然,恍然大悟,原来,作者才是开源软件精神的代言人,不重复制造轮子的践行者啊. uui网址:https://www. ...