通过自定义比较器排序(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工具类的使用,自定义比较器
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
随机推荐
- python基础-----字符编码
1.ASCII ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现 ...
- ROS 可视化(一): 发布PointCloud2点云数据到Rviz
1. 相关依赖package.xml 需要添加对 pcl_ros 包的依赖 2. CMakeLists.txt find_package(PCL REQUIRED) include_directori ...
- understand 安装笔记
1. 下载64位 https://pan.baidu.com/s/1sJNSrG6n5Y0C1UFCZACYEA 或者去官网下载: https://scitools.com/download/arch ...
- google 变量命名规则简要记录
1.文件命名规则 好的文件名命名可以很清晰的看出这个文件将要承载的内容,Google给出的规则为:文件名要全部小写, 可以包含下划线 (_) 或连字符 (-). 按项目约定来, 例如:cmd_save ...
- 20165231 2017-2018-2《Java程序设计》课程总结
每周作业链接汇总 预备作业一:我期待的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:linux安装及学习 第一周作业:初识JAVA,注册码云并配置Git 第二周作业:JAVA基本语法,标 ...
- python 十大web框架排名总结
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的分析. 1 D ...
- Python Web开发框架Django
花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML ...
- ABP 框架从源码学习——abp框架启动和结束(1)
1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承: publ ...
- redhat yum
背景 这个redhat可让我好一顿折腾,对于这个yum的安装,如果成功则罢,不成功可有的收拾的.还是centos比较好啊. 转载 1 下载下面四个软件包(可以从163下载,版本号自己搜索) wget ...
- linux c 时间函数
1. time() 函数提供了 秒 级的精确度 time_t time(time_t * timer) 函数返回从UTC1970-1-1 0:0:0开始到现在的秒数 2. struct timespe ...