医疗网站建设基本流程图,农产品现货交易平台,邮箱域名可以做网站吗,dede 门户网站给定一些数据#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”, “…给定一些数据如下所示: “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 命名空间则包含了泛型集合类的定义如 ListT。
自定义比较器类
class CustomComparer : IComparerstring
{// Compare 方法用于比较两个字符串实现了 IComparerstring 接口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);}
}这个类实现了 IComparerstring 接口该接口定义了比较两个字符串的方法。CustomComparer 类中的 Compare 方法根据版本号的每个部分逐个比较如果发现不同的部分就返回比较结果如果所有部分都相同则比较字符串的长度。
主程序类
class Program
{static void Main(){// 创建一个包含版本号字符串的列表Liststring data new Liststring{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 实例。最后通过循环遍历排序后的列表并将每个元素输出到控制台。 使用自定义的比较器对版本号字符串进行排序排序规则是按照版本号的每个部分逐个比较优先比较较低级别的部分如果所有部分相等则比较字符串的长度。排序结果会按照版本号从小到大的顺序输出。