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

相关文章:

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

给定一些数据&#xff0c;如下所示: “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”, “…...

AI在日常生活中的应用:从语音助手到自动驾驶

文章目录 AI的定义和发展AI在日常生活中的应用1. **智能语音助手**2. **智能家居**3. **智能医疗**4. **自动驾驶** 代码示例&#xff1a;使用Python实现基于机器学习的图片分类AI的未来前景结论 &#x1f389;欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…...

Windows10查看图片的分辨率

文章目录 查看方法 查看方法 鼠标悬停在想查看分辨率大小的图片上&#xff0c;稍等那么零点几秒&#xff0c;就会弹出图片的分辨率信息&#xff0c;如图所示&#xff1a;...

Spring事务和事务传播机制(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中&#xff0c;事务管理是一种用于维护数据库操作的一致性和…...

计算机视觉 -- 图像分割

文章目录 1. 图像分割2. FCN2.1 语义分割– FCN &#xff08;Fully Convolutional Networks&#xff09;2.2 FCN--deconv2.3 Unpool2.4 拓展–DeconvNet 3. 实例分割3.1 实例分割--Mask R-CNN3.2 Mask R-CNN3.3 Faster R-CNN与 Mask R-CNN3.4 Mask R-CNN&#xff1a;Resnet1013…...

ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换

最近在复现yolo v8的程序&#xff0c;特记录一下过程 环境&#xff1a;ubuntu18.04ros melodic 小知识&#xff1a;GPU并行计算能力高于CPU—B站UP主说的 Ubuntu可以安装多个版本的CUDA。如果某个程序的Pyorch需要不同版本的CUDA&#xff0c;不必删除之前的CUDA&#xff0c;…...

Redis三种模式——主从复制,哨兵模式,集群

目录 一、主从复制 1.1主从复制的概念 1.2Redis主从复制作用 1.2.1数据冗余 1.2.2故障恢复 1.2.3负载均衡 1.2.4高可用基石 1.3Redis主从复制流程 1.4部署Redis 主从复制 1.4.1.环境部署 1.4.2.所有服务器都先关闭防火墙 1.4.3.所有服务器都安装Redis 1.4.4修改Master主节点R…...

mysql8.0.31新增只读远程普通用户

在 MySQL 8.0.31 中&#xff0c;可以通过以下步骤新增只读远程普通用户&#xff1a; 1、使用 root 用户登录 MySQL 数据库。 mysql -u root -p 2、创建用户&#xff1a; CREATE USER username% IDENTIFIED WITH mysql_native_password BY password ; 其中&#xff0c;username…...

揭开路由协议隐藏的风险

路由协议在互联网和基于其的服务的运行中发挥着至关重要的作用。然而&#xff0c;许多这些协议的开发都没有考虑到安全问题。 例如&#xff0c;边界网关协议 (BGP) 最初并未考虑对等点之间发生攻击的可能性。过去几十年来&#xff0c;BGP 中的起源和路径验证已投入了大量工作。…...

图片因固定宽高被拉伸了?object-fit:一个神奇的属性

一、问题产生的场景 近期在完成项目开发时&#xff0c;测试人员针对漫画长图上传后的展示提出了一个界面优化的点&#xff0c;因为其特点是长&#xff0c;但是我们展示图片的区域是固定的&#xff0c;如果我们按照正常思路将图片的宽高写死&#xff0c;确实占位大小的问题解决了…...

客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线

客户背景 中圣科技&#xff08;江苏&#xff09;股份有限公司&#xff08;以下简称“中圣科技”&#xff09;&#xff0c;是一家以技术研发为驱动&#xff0c;以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地&#xff0c;与当地政府…...

pandas数据分析40——读取 excel 合并单元格的表头

案例背景 真的很容易疯....上班的单位的表格都是不同的人做的&#xff0c;所以就会出现各种合并单元格的情况&#xff0c;要知道我们用pandas读取数据最怕合并单元格了&#xff0c;因为没规律...可能前几列没合并&#xff0c;后面几列又合并了....而且pandas对于索引很严格&am…...

Java后端开发面试题——微服务篇总结

Spring Cloud 5大组件有哪些&#xff1f; 随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway Ribbon负载均衡策略有哪些 ? RoundRobinRule&…...

第十一章MyBatis查询专题

返回单个Car 返回单个可以直接用Car接收返回参数 Car carCarMapper.getOne(100);返回多个Car 返回多个可以直接用List接收返回参数 List<Car> carCarMapper.getAll();用一个对象无法接受返回多个参数&#xff0c;用list可以接收返回一个参数 返回Map 如果没有合适的…...

测试驱动开发(TDD)

测试驱动开发&#xff08;TDD&#xff09; 本篇文章简单叙述一下什么是测试驱动开发&#xff0c;以及怎么进行测试驱动开发&#xff01; TDD &#xff08;Test Driven Development&#xff09;&#xff1a;&#xff08;源于极限编程&#xff08;XP&#xff09;&#xff09;在不…...

深度学习|CNN卷积神经网络

CNN卷积神经网络 解决的问题人类的视觉原理原理卷积层——提取特征池化层——数据降维全连接层——输出结果 应用图像处理自然语言处理 解决的问题 在CNN没有出现前&#xff0c;图像对人工智能来说非常难处理。 主要原因&#xff1a; 图像要处理的数据量太大了。图像由像素组…...

【洁洁送书第五期】为什么我们要了解可观测性工程

导读 可观测性已成为一个热门话题&#xff0c;并广受关注。随着它的普及&#xff0c;“可观测性”不幸被误作“监控”或“系统遥测”的同义词。可观测性是软件系统的一个特征。而且&#xff0c;只有当团队采用新的实践进行持续开发时&#xff0c;才能在生产软件系统中有效利用这…...

将vue项目通过electron打包成windows可执行程序

将vue项目打包成windows可执行程序 1、准备好dist将整个项目打包 npm run build2、安装electron依赖 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…...

【0基础入门Python Web笔记】三、python 之函数以及常用内置函数

三、python 之函数以及常用内置函数 函数函数定义函数调用函数参数返回值 常用内置函数input()函数range()函数其它 更多实战项目可进入下方官网 函数 函数是一种用于封装可重复使用代码块的工具&#xff0c;能够将一系列操作组织成一个逻辑单元。 函数定义 在Python中&…...

相交链表00

题目链接 相交链表 题目描述 注意点 保证 整个链式结构中不存在环函数返回结果后&#xff0c;链表必须 保持其原始结构如果 listA 和 listB 没有交点&#xff0c;intersectVal 为 0 解答思路 两个链表从头开始遍历&#xff0c;如果其是在同一个位置处相交&#xff0c;则在…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...