当前位置: 首页 > news >正文

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”

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

在这里插入图片描述
实现代码如下:

  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 实例。最后,通过循环遍历排序后的列表,并将每个元素输出到控制台。 使用自定义的比较器对版本号字符串进行排序,排序规则是按照版本号的每个部分逐个比较,优先比较较低级别的部分,如果所有部分相等,则比较字符串的长度。排序结果会按照版本号从小到大的顺序输出。

http://www.lryc.cn/news/136235.html

相关文章:

  • AI在日常生活中的应用:从语音助手到自动驾驶
  • Windows10查看图片的分辨率
  • Spring事务和事务传播机制(2)
  • 计算机视觉 -- 图像分割
  • ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换
  • Redis三种模式——主从复制,哨兵模式,集群
  • mysql8.0.31新增只读远程普通用户
  • 揭开路由协议隐藏的风险
  • 图片因固定宽高被拉伸了?object-fit:一个神奇的属性
  • 客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线
  • pandas数据分析40——读取 excel 合并单元格的表头
  • Java后端开发面试题——微服务篇总结
  • 第十一章MyBatis查询专题
  • 测试驱动开发(TDD)
  • 深度学习|CNN卷积神经网络
  • 【洁洁送书第五期】为什么我们要了解可观测性工程
  • 将vue项目通过electron打包成windows可执行程序
  • 【0基础入门Python Web笔记】三、python 之函数以及常用内置函数
  • 相交链表00
  • 怎样压缩mp4视频大小?
  • ubuntu20.04 安装使用 Indemind 双目相机
  • 一文读懂设备管理系统:是什么、谁需要、怎样选
  • 删除链表的中间节点
  • Q/GDW 1597-2015《国家电网公司应用软件系统通用安全要求》
  • 【前端从0开始】CSS——12、光标属性
  • 文件四剑客
  • 使用lambda表达式提取共用代码使其更加简洁
  • 【八股】2023秋招八股复习笔记3(智力题 非技术题50道)
  • 服务器卡顿如何排查?
  • 设计模式——开闭原则