C# 使用IComparer自定义List类的排序方案

.NET List 、以及IComparer 和 IComparable 较方法中需要实现对象比较规则,这个方法实现后,就可以把这方名字作为参数委托给List的Sort方法,Sort方法在排序时会执行这个方法对List中的对象进行比较需要编写一个对象排序比较的方法,对List中的元素对象没有特殊的要求,但在比较方法中需要实现对象比较规则,这个方法实现后,就可以把这方名字作为参数委托给List的Sort方法,Sort方法在排序时会执行这个方法对List中的对象进行比较。3)使用比较器的排序方法调用:然后,在自定义类型的集合如List myList,上就可以进行sort排序了,如。. 阅读详情

List类中不带参数的Sort函数可以用来为List类中的元素排序,但如果List类中的元素类型本身不能直接进行比较(如自定义的struct和很多class),或是希望采用更加灵活的自定义比较方式,可以通过继承了IComparer接口的函数来解决。

代码示例如下:

1)声明一个类

/// <summary>
/// 人物类
/// </summary>
public class Person
{
    public string Name;
    public int Age;
    public override string ToString()
    {
        return "Name: " + Name + " Age: " + Age;
    }
}

2)声明一个继承了接口IComparer的类

/// <summary>
/// 比较人物类实例大小,实现接口IComparer
/// </summary>
public class PersonComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        if (x == null && y == null) return 0;
        if (x == null) return -1;
        if (y == null) return 1;

        //TODO:Person类实例X与Y的比较规则
        //按姓名由小到大排列,姓名相同的人年龄大的在前
        {
            int temp = string.Compare(x.Name, y.Name);
            if (temp > 0) return -1;
            else if (temp < 0) return 1;

            if (x.Age > y.Age) return 1;
            if (x.Age < y.Age) return -1;
        }

        return 0;
    }
}

3)Main函数,建立一个List,并使用刚建立的PersonComparer类中的规则对List进行排序

static void Main(string[] args)
{
    List<Person> a = new List<Person>();

    a.Add(new Person() { Name = "Tsybius", Age = 23 });
    a.Add(new Person() { Name = "Galatea", Age = 21 });
    a.Add(new Person() { Name = "Lucius", Age = 22 });
    a.Add(new Person() { Name = "Septimus", Age = 22 });
    a.Add(new Person() { Name = "Octavius", Age = 22 });
    a.Add(new Person() { Name = "Lucius", Age = 24 });

    //输出a中全部元素
    Console.WriteLine("排序前");
    foreach (var v in a)
    {
        Console.WriteLine(v.ToString());
    }
    Console.WriteLine("-");

    //对a进行排序
    a.Sort(new PersonComparer());

    //输出a中全部元素
    Console.WriteLine("排序后");
    foreach (var v in a)
    {
        Console.WriteLine(v.ToString());
    }
    Console.WriteLine("-");

    Console.ReadLine();
}

4)程序运行示例

END

C#使用IComparer自定义List类实现排序的方法 主要介绍了C#使用IComparer自定义List类实现排序的方法,涉及C#使用IComparer接口定义List类进行排序的相关技巧,需要的朋友可以参考下 立即下载

相关推荐

STM32入门教程:WiFi通信

STM32是一款强大的嵌入式系统开发平台,可以用于开发各种应用程序,包括WiFi通信。在本教程中,我们将介绍如何使用STM32开发板和WiFi模块进行无线通信。以下是一个详细的代码案例,涵盖了WiFi通信的基本概念和实现。

qq_67153941的博客 1347

c# List 与 Comparer

通过自定义比较器实现List中元素quchong //自定义排序和去重规则 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class car { publ

yichudu 2076

基于MicroBlaze与LWIP的FPGA以太网通信实战指南

本文详细介绍了基于MicroBlaze软核处理器与LWIP协议栈的FPGA以太网通信实现方案。通过Vivado工具链配置硬件设计,结合LWIP轻量级TCP/IP协议栈优化,提供高效、低成本的嵌入式网络解决方案,适用于工业控制等场景。文章包含硬件设计、软件配置及常见问题排查等实战指南。

weixin_29290863的博客 532

排序与list.sort()使用

排序与List.sort()

zhutaorun的博客 2万+

VINS-Fusion实战:从零搭建无人机视觉惯性导航系统(附ROS配置指南)

本文提供了一份详尽的VINS-Fusion实战指南,涵盖从硬件选型、传感器标定到ROS节点配置与参数调优的全过程。重点解析了如何将VINS-Fusion视觉惯性里程计系统与PX4飞控深度集成,并实现室外GPS融合,旨在帮助开发者从零搭建稳定、高精度的无人机视觉惯性导航系统。

lll78的博客 863

CCS软件仿真插件移植避坑指南:从CCS5.5到7.4的完整流程

本文详细介绍了将CCS软件仿真插件从CCS5.5迁移至CCS7.4的完整流程与避坑指南。针对TMS320F28335等C2000系列芯片,重点解析了仿真核心文件、配置数据库、连接定义及驱动文件的移植步骤,并通过两个实战Demo验证了移植后仿真环境的可用性,帮助开发者在无硬件条件下继续高效进行算法验证与调试。

defi6farmer的博客 456

深入理解 c# 第一章 使用IComparer<Product> 对 List<Product> 进行排序

class ListSortWithComparer { class ProductNameComparer : IComparer&lt;Product&gt; { public int Compare(Product first, Product second) { ret...

eyetired的博客 198

金融数据自动化:从同花顺API到Excel的智能转换之旅

本文详细介绍了如何利用同花顺API实现金融数据自动化处理,并将其智能转换为Excel格式的全流程。通过Python编程和Excel高级技巧,读者可以掌握从数据获取、清洗到输出的完整解决方案,大幅提升金融数据分析的效率和准确性。文章特别强调了同花顺API的使用技巧和Excel自动化输出的最佳实践。

sql99的博客 461

C#常用接口-自定义比较器IComparer 接口

在C#中,和IComparer接口用于定义对象的比较逻辑,以便可以对它们进行排序。这两个接口在功能上相似,但它们在使用泛型方面有所不同。

AranZhangStu的博客 1978

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 383

Python爬虫实战:实时监控美国SEC官网文件更新,助你第一时间掌握市场动态

在资本市场中,信息就是财富。美国证券交易委员会(SEC)官网公开了大量公司披露文件,涵盖财报、招股说明书、内幕交易等重要信息。对投资者、分析师及法律合规人员来说,实时监控这些公开文件具有重要价值。

2201_76125261的博客 594

Unity游戏开发实战:如何用List.Sort()实现角色属性多条件排序(附完整代码)

本文详细讲解了在Unity游戏开发中,如何利用C#的List.Sort()方法实现自定义类的多条件排序。通过实战案例,深入解析了Lambda表达式和IComparer比较器两种核心方法,帮助开发者灵活处理角色属性等复杂数据的权重排序需求,并附有完整的可复用代码示例。

tensor9flow的博客 299

嵌入式内存管理之“LittleFS文件系统”开发(附LittleFS项目源码)

本文介绍了如何在嵌入式系统中实现 LittleFS 文件系统,并结合 Flash 存储进行数据管理。通过详细的代码示例,展示了如何配置、挂载 LittleFS 文件系统,并进行文件操作,如读取、写入和更新数据。特别地,博客通过实际应用演示了如何实现启动计数功能,以及如何处理文件系统的格式化和挂载过程。该示例帮助读者掌握在资源受限的嵌入式环境中实现高效文件存储管理的关键技术。

Bit_Dong的博客 3180

C# List.Sort排序

C#中,List.Sort() 不仅为我们提供了默认的排序方法,还为我们提供了4种自定义排序的方法,通过默认排序方法,我们无需重写任何Sort()方法的实现代码,就能对单参数类型的List数据进行单一规则的排序,如果通过对这些方法进行改进我们可以轻松做到对多参数、多规则的复杂排序。 默认排序 排序Sort,倒序Reverse //默认是元素第一个字母按升序 list.Sort(); //将List里面元素顺序反转 list.Reverse(); //从第二个元素开始,反转4个元素 //结果list.

Peter的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# 中的List.Sort()--集合排序方法全面解析

在C#中,List.Sort() 不仅为我们提供了默认的排序方法,还为我们提供了4种自定义排序的方法,通过默认排序方法,我们无需重写任何Sort()方法的实现代码,就能对单参数类型的List数据进行单一规则的排序,如果通过对这些方法进行改进我们可以轻松做到对多参数、多规则的复杂排序。 下面是C#自定义排序的4种方法: List<T>.Sort(); List<T>.Sort(IComparer<T> Comparer); List<T>.Sort(int

chinaherolts2008的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C#中List.Sort()--集合排序方法分析

List.Sort() 为我们提供了4种自定义排序方法,通过对这些方法改进我们可以轻松做到对多参数、多规则的复杂排序: List<T>.Sort(); List<T>.Sort(IComparer<T> Comparer); List<T>.Sort(int index, int count, IComparer<T> Compare...

小宇飞刀的BLOG 7999

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

List排序Sort和OrderBy方法(C#)

Sort和OrderBy的定义比较 1、List.Sort()排序: Sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和堆排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择堆排序。 说明:   a. 使用Sort排序时,有可能

weixin_46433786的博客 4万+

c#中List排序

一、背景   有时用户需要按某项排序,但是查询结果以List格式存储,我们当然可以自己编写一个快速排序的方法进行排序,但是还有多个选择,并且可能比你写的短、效率也不差,那不如在恰当的时候选择其他方法对List进行排序 二、方法   第一种: List的OrderBy与OrderByDescending方法   个人认为如果只是简单的进行排序,并且并不想影响实体类的话,这个方法是最有效的,只需一句话便可解决排序问题。其中OrderBy是升序操作、OrderByDescending是降序操作。然后在其中使用la

m0_52390420的博客 1万+

c# 自定义List排序

自定义List排序sort返回排序的几种实现方式List.Sort(Comparison comparison)List.Sort(IComparer Comparer) 刚使用sort排序又又又又又忘了,返回1(大于0即可),-1(小于0即可)是怎么排序了,果然是年纪大了。 sort返回 void Start() { List<int> tempList = new List<int>() {2,3,9,3,4 }; tempList.So

刘培玉-大王 1757

C# List.Sort方法总结

摘要:本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理。对于基础类型如int、bool和string,由于它们实现了IComparable接口,可直接调用Sort()排序。但对于自定义类型,必须实现IComparable接口或使用IComparer比较器才能排序。通过源码分析发现,排序的本质是通过Compare方法的返回值来决定元素的交换顺序。文章还展示了三种实现自定义排序的方式:实现IComparable接口、使用IComparer比较器以及通过Comparison委托,并解释了其

Morris-w的专栏 1361

C# IComparer 用法即正逆序返回值理解

本文讲述了C#使用IComparer自定义List类实现排序的方法,具体如下: List类中不带参数的Sort函数可以用来为List类中的元素排序,但如果List类中的元素类型本身不能直接进行比较(如自定义的struct或class),或是希望采用不同于默认的自定义比较方式,则可以通过继承了IComparer接口的函数来解决。其他容器类的排序大致思路也差不多 BTW,目前只看了ICompare

道不明 4044

C# 数组Array.Sort()、List.Sort()排序使用方法

【对一维数组】 数据:int[] A = {16, 67, 12, 50, 8, 46, 4}; 整体升序:Array.Sort(A); 整体降序:先升序,再反转Array.Reverse(A); 局部升序:Array.Sort(A,2,4);//从索引为2的元素开始的4个元素进行升序 局部降序:Array.Reverse(A,2,3);//对索引为2的元素开始的3个元素进行反转,这是接着Array.Sort执行的 从左到右的图片分别是从整体升序到 的结果 【对二维数组】 数据: ...

enternalstar的博客 3万+
上一篇: Cg(C for Graphic)标准函数库之数学函数与几何函数
下一篇: C#基础教程之IComparable用法,实现List<T>.sort()排序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值