C#使用自定义的比较器对版本号(编码)字符串进行排序

这篇具有很好参考价值的文章主要介绍了C#使用自定义的比较器对版本号(编码)字符串进行排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给定一些数据,如下所示:

“1.10.1.1.1.2”,
“1.1”,
“2.2”,
“1.1.1.1”,
“1.1.3.1”,
“1.1.1”,
“2.10.1.1.1”,
“1.1.2.1”,
“1.2.1.1”,
“2.5.1.1”,
“1.10.1.1”,
“1.10.2.1”,
“1.11.3.1”,
“1.11.12.1”,
“1.11.11.1”,
“1.11.3.1”,
“1”,
“1.1.1.1.1”,
“1.1.1.1.1.1”

实现效果:
按照每个节点层级的大小进行排序,如下效果:

C#使用自定义的比较器对版本号(编码)字符串进行排序,C#,c#,开发语言
实现代码如下:

  1. 引入命名空间:
using System;
using System.Collections.Generic;

这里引入了两个命名空间,System 命名空间提供了访问常用的数据类型和基本功能的类,System.Collections.Generic 命名空间则包含了泛型集合类的定义,如 List<T>

  1. 自定义比较器类:
class CustomComparer : IComparer<string>
{
    // Compare 方法用于比较两个字符串,实现了 IComparer<string> 接口
    public int Compare(string x, string y)
    {
        // 将版本号字符串按 '.' 分隔为字符串数组
        string[] partsX = x.Split('.');
        string[] partsY = y.Split('.');

        // 找出两个数组的最小长度
        int minLength = Math.Min(partsX.Length, partsY.Length);

        // 逐个比较每个部分的版本号
        for (int i = 0; i < minLength; i++)
        {
            int numX = int.Parse(partsX[i]); // 将部分转换为整数
            int numY = int.Parse(partsY[i]);

            // 如果当前部分的版本号不相等,则返回比较结果
            if (numX != numY)
            {
                return numX.CompareTo(numY); // 返回整数的比较结果
            }
        }

        // 如果前面的部分都相等,比较版本号的长度
        return partsX.Length.CompareTo(partsY.Length);
    }
}

这个类实现了 IComparer<string> 接口,该接口定义了比较两个字符串的方法。CustomComparer 类中的 Compare 方法根据版本号的每个部分逐个比较,如果发现不同的部分,就返回比较结果;如果所有部分都相同,则比较字符串的长度。

  1. 主程序类:
class Program
{
    static void Main()
    {
        // 创建一个包含版本号字符串的列表
        List<string> data = new List<string>
        {
            "1.10.1.1.1.2",
            "1.1",
            "2.2",
            "1.1.1.1",
            "1.1.3.1",
            "1.1.1",
            "2.10.1.1.1",
            "1.1.2.1",
            "1.2.1.1",
            "2.5.1.1",
            "1.10.1.1",
            "1.10.2.1",
            "1.11.3.1",
            "1.11.12.1",
            "1.11.11.1",
            "1.11.3.1",
            "1",
            "1.1.1.1.1",
            "1.1.1.1.1.1"
        };

        // 使用自定义比较器对列表进行排序
        data.Sort(new CustomComparer());

        // 遍历排序后的列表并输出结果
        foreach (var item in data)
        {
            Console.WriteLine(item);
        }
    }
}

在主程序类中,首先创建了一个包含版本号字符串的列表 data,然后使用 Sort 方法对列表进行排序,传入了一个自定义的比较器 CustomComparer 实例。最后,通过循环遍历排序后的列表,并将每个元素输出到控制台。 使用自定义的比较器对版本号字符串进行排序,排序规则是按照版本号的每个部分逐个比较,优先比较较低级别的部分,如果所有部分相等,则比较字符串的长度。排序结果会按照版本号从小到大的顺序输出。文章来源地址https://www.toymoban.com/news/detail-668440.html

到了这里,关于C#使用自定义的比较器对版本号(编码)字符串进行排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 剑指 Offer 45. !!把数组排成最小的数(使用比较器的定制排序;快速排序)

    剑指 Offer 45. 把数组排成最小的数 中等 662 相关企业 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 这道题在左程云算法课上讲过,但是这次

    2024年02月14日
    浏览(28)
  • 【STM32】STM32G4系列片内模拟器件-比较器的使用

    STM32G4系列内置了片内模拟比较器,为电机控制、电源监测等方面的应用提供了很大的便利。要使用片内比较器,只需使用STM32CubeMX进行简单配置即可。 首先,在CubeMX中打开比较器的接口,这里展示了比较器1的输入输出端口。 在比较器配置界面中设置好正负输入端口,其中负

    2024年02月08日
    浏览(140)
  • Java ---比较器

          我们知道基本数据类型的数据(除 boolean 类型外)需要比较大小的话,之间使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢?      在 Java 中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比

    2024年02月03日
    浏览(26)
  • 认识比较器

    Java中比较器是排序、加入有序数组等操作的时候必须要有的,没有的话会报错,例如下面这段代码: 运行时会发生下面的异常 Exception in thread \\\"main\\\" java.lang.ClassCastException: dataStructure.heap.Student cannot be cast to java.lang.Comparable     at java.util.ComparableTimSort.countRunAndMakeAscending(Compar

    2023年04月25日
    浏览(36)
  • 8.2 电压比较器(1)

    电压比较器是对输入信号进行鉴幅与比较的电路,是组成非正弦波发生电路的基本单元电路,在测量和控制中有着相当广泛的应用。 1、电压比较器的电压传输特性 电压比较器的输出电压 u O u_{scriptscriptstyle O} u O ​ 与输入电压 u I u_{scriptscriptstyle I} u I ​ 的函数关系 u O = f

    2024年02月11日
    浏览(32)
  • Java比较器(Comparator接口)

    1.当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序 2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回

    2024年02月15日
    浏览(31)
  • LM324电压比较器介绍

    LM324 电压比较器简介       LM324 是单电源四路运算放大器,是一个具有差分输入和单端输出的高增益电压放大器。与在单电源应用场合的标准运算放大器比起来,其优点更明显。该四路放大器可以工作于低至3.0 V或高达32 V的电源电压,静态电流是MC1741的五分之一左右(每个放

    2024年02月06日
    浏览(60)
  • Verilog | 4位数值比较器

    牛客上的一道题,记录一下 这道题有两种思路: 第一种是按位比较,列举出所有情况: 第二种方法是,使用同或的方式获取一个标志位,进而获得判断依据: 关于比较器还有另外一道题 问题描述 给定8个数,以及若干二输入的比较器(可以将两个输入排序)。要求在单周期

    2024年02月11日
    浏览(21)
  • LM393电压比较器介绍

    概述       LM393 是双电压比较器集成电路。主要应用在脉冲发生器、模数转换器、限幅器、数字逻辑门电路、电压比较电路等场合。LM393电压比较器能直接连接TTL和CMOS电平电路。 特点 1、工作温度范围:0℃ --- +70℃; 2、工作电源电压范围宽,单电源、双电源均可工作:    

    2024年02月03日
    浏览(51)
  • 一位比较器【模电实验】

    一位比较器,数值比较器的作用和原理是什么? 一、数值比较器的定义及功能 在数字系统中,特别是在计算机中都具有运算功能,一种简单的运算就是比较两个数A和B的大小。数值比较器就是对两数A、B进行比较,以判断其大小的逻辑电路。比较结果有A>B、A<B以及

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包