通过自定义比较器排序(C#版)
一、方法概述
自定义比较器需要实现接口IComparer<T>
二、示例过程
1、新建一个Product产品类
/// <summary>
/// 产品类
/// </summary>
public class Product
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 价格
/// </summary>
public Double Price { get; set; }
/// <summary>
/// 编号
/// </summary>
public int Num { get; set; }
}
2、新建一个Product对象并赋值
List<Product> products = new List<Product>();
products.Add(new Product() { Name = "pro1", Price = 2.4, Num = });
products.Add(new Product() { Name = "pro2", Price = 4.6, Num = });
products.Add(new Product() { Name = "pro3", Price = 1.8, Num = });
products.Add(new Product() { Name = "pro4", Price = 25.2, Num = });
3、创建比较器
(1) 产品价格比较器:
/// <summary>
/// 产品价格比较器
/// </summary>
public class ProductPriceComparer : IComparer<Product>
{
public int Compare(Product x,Product y)
{
if (x == null && y == null) return ;
if (x == null) return -;
if (y == null) return ;
var diff = x.Price - y.Price;
if (diff > ) return ;
if (diff < ) return -;
return ;
}
}
(2) 产品名称比较器:
/// <summary>
/// 产品名称比较器
/// </summary>
public class ProductNameComparer : IComparer<Product>
{
public int Compare(Product x,Product y)
{
if (x == null && y == null) return ;
if (x == null) return -;
if (y == null) return ;
return x.Name.CompareTo(y.Name);
}
}
(3) 产品编号比较器:
/// <summary>
/// 产品编号比较器
/// </summary>
public class ProductNumComparer : IComparer<Product>
{
public int Compare(Product x, Product y)
{
if (x == null && y == null) return ;
if (x == null) return -;
if (y == null) return ;
return x.Num-y.Num;
}
}
4、打印输出结果的方法
/// <summary>
/// 打印结果
/// </summary>
/// <param name="products"></param>
public static void PrintResult(List<Product> products)
{
Console.WriteLine("开始打印");
foreach (var product in products)
{
Console.WriteLine($"name:{product.Name},price:{product.Price},num:{product.Num}");
}
Console.WriteLine("打印完毕");
Console.WriteLine("----------分割线----------------------");
}
5、通过比较器排序并打印出结果
products.Sort(new ProductNameComparer());
Console.WriteLine("根据名称排序:");
PrintResult(products); products.Sort(new ProductNumComparer());
Console.WriteLine("根据编号排序:");
PrintResult(products); products.Sort(new ProductPriceComparer());
Console.WriteLine("根据价格排序:");
PrintResult(products);
6、输出结果
通过自定义比较器排序(C#版)的更多相关文章
- Collections之sort的两个方法(自然排序和自定义比较器排序)
Collections是个服务于Collection的工具类(静态的),它里面定义了一些集合可以用到的方法. 本文演示了Collections类里sort()的两个方法.第一种只需传入被排序的集合,便 ...
- 自定义比较器(IComparer接口的实现)
class FileNameSort : IComparer { [System.Runtime.InteropServices.DllImport("Shlwapi.dll", ...
- TreeSet 比较器排序 自定义对象
package cn.itcast.day21.treeset2; import java.util.Comparator; import java.util.TreeSet; /* * TreeSe ...
- list<T> 自定义比较器进行排序
今天在研究List<T> 集合如何排序,我试过很多,但是都不行,然后看到msdn中的这个比较器排序,自己测试了代码,No Problem.给大家分享一下. 类型 T 的默认比较器按如下方式 ...
- SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...
- MySQL按指定字段自定义列表排序
亲测实例: 1级排序:同城>异城 2级排序:未领养>以领养 3级排序:发布最新靠前 MYSQL语句如下: SELECT ura.id,ura.city,ura.uid,ura.rescue ...
- [c#基础]泛型集合的自定义类型排序
引用 最近总有种感觉,自己复习的进度总被项目中的问题给耽搁了,项目中遇到的问题,不总结又不行,只能将复习基础方面的东西放后再放后.一直没研究过太深奥的东西,过去一年一直在基础上打转,写代码,反编译,不 ...
- Java中的equals方法和自定义比较器
Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...
- 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
随机推荐
- css3基础一
1,css简介 CSS 用于控制网页的样式和布局.样式定义如何显示html元素,样式通常保存在外部的 .css 文件中.通过仅仅编辑一个简单的 CSS 文档,外部样式表使你有能力同时改变站点中所有页面 ...
- LwIP Application Developers Manual3---链路层和网络层协议之ARP,IPV4
1.前言 本文主要讲述链路层和网络层的几种协议:ARP,ipv4 2. ARP 2.1 ARP的主要应用 ARP的主要应用是在与互联网相连的以太网网络层,该层需要一些机制将MAC地址(该地址主要由制造 ...
- LwIP Application Developers Manual1---介绍
1.前言 本文主要是对LwIP Application Developers Manual的翻译 2.读者(应用开发手册的读者) 谁适合读这份手册 网络应用的开发者 想了解lwIP的网络应用开发者 阅 ...
- MySQL查看表的索引【转】
查看表的索引: show index from table_name(表名) 结果列表中各字段的含义: · Non_unique 如果索引不能包括重复词,则为0.如果可以,则为1. · Key_nam ...
- js模板引擎-art-template常用总结(转)
原文:https://www.cnblogs.com/shiyou00/p/6841801.html art-template javascript 模板引擎,官网:https://github.co ...
- Minidump文件分析
原文地址:blog.csdn.net/pkrobbie/article/details/6636310 简介 在过去几年里,崩溃转储(crash dump)成为了调试工作的一个重要部分.如果软件在客户 ...
- Mudo C++网络库第二章学习笔记
线程同步的精要 并发有两种基本的模型: 一种是message passing(消息传递); 另一种是shared memory(共享内存); 在分布式系统中(有多台物理机需要通信), 运行在多台机器上 ...
- xl2tpd[26104]: Maximum retries exceeded for tunnel 33925. Closing
Sep 5 14:31:50 root charon: 13[ENC] generating QUICK_MODE request 3930082374 [ HASH ]Sep 5 14:31:5 ...
- 将C注册到lua环境中使用
注册到lua的方式有两种,一种是lua解释器,如果支持动态链接,使用动态链接机制,将函数接口编译成动态链接库,然后将动态链接库放到lua的C路径(LUA_CPATH)中,然后在lua文件中直接使用 r ...
- 【算法】二分查找法&大O表示法
二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...