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”
实现效果:
按照每个节点层级的大小进行排序,如下效果:
实现代码如下:
- 引入命名空间:
using System;
using System.Collections.Generic;
这里引入了两个命名空间,System
命名空间提供了访问常用的数据类型和基本功能的类,System.Collections.Generic
命名空间则包含了泛型集合类的定义,如 List<T>
。
- 自定义比较器类:
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
方法根据版本号的每个部分逐个比较,如果发现不同的部分,就返回比较结果;如果所有部分都相同,则比较字符串的长度。
- 主程序类:
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#使用自定义的比较器对版本号(编码)字符串进行排序
给定一些数据,如下所示: “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. **自动驾驶** 代码示例:使用Python实现基于机器学习的图片分类AI的未来前景结论 🎉欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…...
Windows10查看图片的分辨率
文章目录 查看方法 查看方法 鼠标悬停在想查看分辨率大小的图片上,稍等那么零点几秒,就会弹出图片的分辨率信息,如图所示:...
Spring事务和事务传播机制(2)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…...
计算机视觉 -- 图像分割
文章目录 1. 图像分割2. FCN2.1 语义分割– FCN (Fully Convolutional Networks)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:Resnet1013…...
ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换
最近在复现yolo v8的程序,特记录一下过程 环境:ubuntu18.04ros melodic 小知识:GPU并行计算能力高于CPU—B站UP主说的 Ubuntu可以安装多个版本的CUDA。如果某个程序的Pyorch需要不同版本的CUDA,不必删除之前的CUDA,…...
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 中,可以通过以下步骤新增只读远程普通用户: 1、使用 root 用户登录 MySQL 数据库。 mysql -u root -p 2、创建用户: CREATE USER username% IDENTIFIED WITH mysql_native_password BY password ; 其中,username…...
揭开路由协议隐藏的风险
路由协议在互联网和基于其的服务的运行中发挥着至关重要的作用。然而,许多这些协议的开发都没有考虑到安全问题。 例如,边界网关协议 (BGP) 最初并未考虑对等点之间发生攻击的可能性。过去几十年来,BGP 中的起源和路径验证已投入了大量工作。…...
图片因固定宽高被拉伸了?object-fit:一个神奇的属性
一、问题产生的场景 近期在完成项目开发时,测试人员针对漫画长图上传后的展示提出了一个界面优化的点,因为其特点是长,但是我们展示图片的区域是固定的,如果我们按照正常思路将图片的宽高写死,确实占位大小的问题解决了…...
客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线
客户背景 中圣科技(江苏)股份有限公司(以下简称“中圣科技”),是一家以技术研发为驱动,以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地,与当地政府…...
pandas数据分析40——读取 excel 合并单元格的表头
案例背景 真的很容易疯....上班的单位的表格都是不同的人做的,所以就会出现各种合并单元格的情况,要知道我们用pandas读取数据最怕合并单元格了,因为没规律...可能前几列没合并,后面几列又合并了....而且pandas对于索引很严格&am…...
Java后端开发面试题——微服务篇总结
Spring Cloud 5大组件有哪些? 随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway Ribbon负载均衡策略有哪些 ? RoundRobinRule&…...
第十一章MyBatis查询专题
返回单个Car 返回单个可以直接用Car接收返回参数 Car carCarMapper.getOne(100);返回多个Car 返回多个可以直接用List接收返回参数 List<Car> carCarMapper.getAll();用一个对象无法接受返回多个参数,用list可以接收返回一个参数 返回Map 如果没有合适的…...
测试驱动开发(TDD)
测试驱动开发(TDD) 本篇文章简单叙述一下什么是测试驱动开发,以及怎么进行测试驱动开发! TDD (Test Driven Development):(源于极限编程(XP))在不…...
深度学习|CNN卷积神经网络
CNN卷积神经网络 解决的问题人类的视觉原理原理卷积层——提取特征池化层——数据降维全连接层——输出结果 应用图像处理自然语言处理 解决的问题 在CNN没有出现前,图像对人工智能来说非常难处理。 主要原因: 图像要处理的数据量太大了。图像由像素组…...
【洁洁送书第五期】为什么我们要了解可观测性工程
导读 可观测性已成为一个热门话题,并广受关注。随着它的普及,“可观测性”不幸被误作“监控”或“系统遥测”的同义词。可观测性是软件系统的一个特征。而且,只有当团队采用新的实践进行持续开发时,才能在生产软件系统中有效利用这…...
将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()函数其它 更多实战项目可进入下方官网 函数 函数是一种用于封装可重复使用代码块的工具,能够将一系列操作组织成一个逻辑单元。 函数定义 在Python中&…...
相交链表00
题目链接 相交链表 题目描述 注意点 保证 整个链式结构中不存在环函数返回结果后,链表必须 保持其原始结构如果 listA 和 listB 没有交点,intersectVal 为 0 解答思路 两个链表从头开始遍历,如果其是在同一个位置处相交,则在…...
怎样压缩mp4视频大小?
怎样压缩mp4视频大小?由于视频文件的体积通常比其他类型的文件更大,因此它们需要更多的存储空间来保存。但是,如果我们的设备、应用程序或平台不支持某些视频格式或分辨率,或者我们没有足够的存储空间来容纳这些大型视频文件&…...
ubuntu20.04 安装使用 Indemind 双目相机
1、先按照官方wiki搭建环境 Ubuntu 安装 — IMSEE SDK 1.4.2 文档(ubuntu20使用官网会报错,可以参考我下面的步骤) 1.1、获取代码 sudo apt-get install git git clone https://github.com/indemind/IMSEE-SDK.git 1.2、准备依赖 cd <…...
一文读懂设备管理系统:是什么、谁需要、怎样选
工业的迅猛发展让人类向前迈出了史无前例的步伐,工业4.0将我们又带入了一个信息化技术促进工业变革的新时代——智能化时代。一台台机器设备是工业发展史上必不可少的参与者,但企业对设备的管理存在种种痛点,比如生产设备多,但备件…...
删除链表的中间节点
题目: 示例: 思路: 这个题类似于寻找链表中间的数字,slow和fast都指向head,slow走一步,fast走两步,也许你会有疑问,节点数的奇偶不考虑吗?while执行条件写成fast&&…...
Q/GDW 1597-2015《国家电网公司应用软件系统通用安全要求》
电力安全测试报告 电力行业检测标准 随着信息技术的快速发展和广泛应用,应用软件系统已成为企业信息化建设中不可或缺的重要组成部分。然而,应用软件系统的安全问题也随之而来,给企业和用户带来了潜在的风险和威胁。为了提高应用软件系统的…...
【前端从0开始】CSS——12、光标属性
光标属性 cursor 属性规定要显示的光标的类型(形状)。 该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状(不过 CSS2.1 没有定义由哪个边界确定这个范围)。 属性名效果crosshair精确定位“十”字形pointer“小手”形…...
文件四剑客
目录 前言 一、正则表达式 二、grep 三、find 四、sed 五、awk 前言 文件四剑客是指在计算机领域中常用的四个命令行工具,包括awk、find、grep和sed。它们在处理文本文件和搜索文件时非常强大和实用。 1. awk是一种强大的文本处理工具,它允许用户根据指…...
使用lambda表达式提取共用代码使其更加简洁
1、在开发预下单接口访问并发问题出现需要加锁代码如下 RLock lock redissonClient.getLock(String.format(appointmentKey, activityId, studentId));try {boolean tryLock lock.tryLock(10, 20, TimeUnit.SECONDS);if (tryLock) {AppointmentMallOrderInfoDTO appointmentM…...
【八股】2023秋招八股复习笔记3(智力题 非技术题50道)
文章目录 1、智力题赛⻢问题烧绳⼦问题找出最重球问题药丸问题有两个杯⼦,囚犯问题⽣孩⼦问题赢汽⻋问题卡牌问题拿硬币问题量⽔问题聚会问题数字游戏问题艾滋病问题找出变质药问题毒药问题分盐问题弹球问题病狗问题⽕⻋运煤问题分苹果问题分⾦条问题搬⾹蕉问题舀酒…...
服务器卡顿如何排查?
服务器网络卡,一般情况下,请先检查您服务器的使用情况。 1.CPU使用率是否大于50%。 2.网络使用率是否过高。 3.内存使用率是否过高。 如果出现上述情况,则表明您的服务器或网络无法承载您目前的服务,请联系技术人员调整您的资…...
crm客户管理系统下载/杭州网站seo价格
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解。下面将自己的理解和认识简要的做个笔记,有…...
深圳有多少网站建设公司/营销策略的概念
操作界面这个小系统一共包含4个脚本sh功能备注oneKey.sh主程序,调用其他程序,对外提供功能menu.sh勾画菜单function.sh提供操作数据库接口valid.sh操作mysql数据库,验证数据menu.sh画字符菜单#!/bin/bashfunction print_main_menu(){cat <…...
漳州做网站建设/搜索引擎关键词排名优化
DB2查看VIEW定义的SQL文。 select VD.text as V_DLL from syscat.VIEWS as VD where VD.VIEWSCHEMA DB2ADMIN and VD.VIEWNAME V_DEPT; 字段V_DLL就是VIEW的DLL了。...
仙游网站建设/seo搜索引擎优化是做什么的
本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等 一、前言 很多小伙伴反馈说,高并发学了那么久,但是在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍…...
天门网站网站建设/宁波seo外包推广排名
最近比较绕有兴趣地学习PHP,看完了一些基础语法、学会了使用SMARY模版,继而看了ThinkPHP框架, 此框架的强大超出我的意外,它的ROR真是强,还有内置的CRUD,比JAVA的框架更智能。 方便记忆性的学习转载了一些以下文章 CUR…...
做网站要准备什么/网络推广服务合同范本
字节跳动的前端一直是大热之选,薪资和技术都是国内的最前沿。本文将为大家简单介绍一下字节技术岗的职级体系和相应的技术要求。并给大家分享一套高质量面试题:「由字节资深前端大佬整理的100道高频面试题」,祝大家求职顺利!字节跳…...