智能文件名排序

默认排序问题

windows排序

Windows的资源管理中,提供了文件名的智能排序功能,可以识别出文件名中数字(数字位数不相同),然后比较数字大小进行排序,如下图:

代码默认排序

但在C#中的列表排序中则是按照从左到右一个一个字符进行比较进行排序,如下图:

List<string> list=new List<string>();
list.Add("文件(11)");
list.Add("文件(22)");
list.Add("文件(1)");
list.Add("文件(2)");
list.Add("文件(3)");
list.Add("文件(4)");
list.Sort();
list.ForEach(l=>Console.WriteLine(l));

运行效果

 

排序改进

文件名比较方法

        public static int FileNameCompare(string s1, string s2){MatchCollection matchList1 = Regex.Matches(s1, @"\d+");//找出字符串s1中的数字MatchCollection matchList2 = Regex.Matches(s2, @"\d+");//找出字符串s2中的数字int minCount = matchList1.Count >= matchList2.Count ? matchList2.Count : matchList1.Count;for (int i = 0; i < minCount; i++){//循环数字一一比较if (matchList1[i].Index != matchList2[i].Index)break;//数字位置不同,直接使用字符串比较if (s1.Substring(0, matchList1[i].Index) != s2.Substring(0, matchList2[i].Index))break;//数字之前字符不同,直接使用字符串比较if (matchList1[i].Value == matchList2[i].Value)continue;//数字相同时,比较下一组数字int s = matchList1[i].Value.Length - matchList2[i].Value.Length;if (s == 0)break;//数字位数相同,直接使用字符串比较string temp = "";if (s > 0) //这里不直接比较数字,是为了对数字之后的字符串再进行比较
                {//当s1的数字长度大于s2时,对s2的前面进行补0操作,然后在比较s1与s2字符串temp = s2;for (int n = 0; n < s; n++){temp = s2.Insert(matchList2[i].Index, "0");}int r = s1.CompareTo(temp);return r == 0 ? -1 : r;}if (s < 0){//当s1的数字长度小于s2时,对s1的前面进行补0操作,然后在比较s1与s2字符串temp = s1;for (int n = 0; n < Math.Abs(s); n++){temp = s1.Insert(matchList1[i].Index, "0");}int r = temp.CompareTo(s2);return r == 0 ? 1 : r;}}return s1.CompareTo(s2);}

 

方法使用

 

            List<string> list = new List<string>();list.Add("文件(11)");list.Add("文件(22)");list.Add("文(11)件(1)");list.Add("文(2)件(2)");list.Add("文件(3)");list.Add("文件(4)");list.Sort((m1, m2) => Common.THMethod.FileNameCompare(m1, m2));list.ForEach(l => Console.WriteLine(l));

 

效果

 

 

转载于:https://www.cnblogs.com/zlulu/p/6214758.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2005 Web Application Project启用WSE(Ver 3.0)的方法

使用过WSE的朋友都知道&#xff0c;若要启用Server端Projects的WSE功能&#xff0c;需要选中如下所示的两个单选框:Enable this project for Web Services Enhancements和Enable Microsoft Web Services Enhancement Soap Protocol Factory.但是在WSE3.0中对于Web Application …

计算机英语课程背景,专家讲座第十五讲:信息化背景下高质量大学英语课程建设与教学设计...

11月27日下午&#xff0c;南京大学王海啸教授应邀到我院开展题为“信息化背景下高质量大学英语课程建设与教学设计”学术讲座。讲座由外国语言文学学院胡元江副院长和鲍贵教授共同主持&#xff0c;学院全体教师和研究生参加了本次学术活动。王海啸教授目前兼任教育部高等学校大…

ORA-28001: the password has expired

原创文章地址:https://blog.csdn.net/zdw_wym/article/details/38066745 Oracle提示错误消息 ORA-28001: the password has expired&#xff0c;是由于Oracle11G的新特性所致&#xff0c;Oracle11G创建用户时缺省密码过期限制是180天&#xff08;即6个月&#xff09;&#xff0…

使用c#操作IBM WebSphere MQ

IBM WebSphere MQ 5.3升级到CSD05之后&#xff0c;提供了使用.net操作MQ的类库&#xff0c;安装完成之后&#xff0c;会在MQ的安装目录的bin文件夹下面多出一个amqmdnet.dll文件&#xff0c;把这个DLL作为引用添加到你的.net工程中&#xff0c;你的.net程序中就可以操作IBM Web…

计算机office二级app,计算机二级office

计算机二级office是一款为用户提供各种计算机二级知识的软件&#xff0c;用户可以在应用中快速的学习计算机二级office知识&#xff0c;顺利通过二级考试&#xff1b;应用拥有海量的精选计算机二级考试题库&#xff0c;不放过每一个考题&#xff0c;让用户全面的学习二级知识&a…

影响员工敬业度的三大因素

敬业的员工通常业绩比较突出&#xff0c;对企业做的贡献很大。经理人当然希望自己的员工个个都是敬业的员工&#xff0c;但实际上&#xff0c;在中国只有8%的员工具有敬业精神&#xff0c;相比全球的平均水平14%还有很大的差距。 是什么因素造成员工不敬业呢&#xff1f;根据世…

计算机答辩答不上来怎么回答,答辩答不上来怎么办

论文答辩成为了不少同学的最后一次考试&#xff0c;从开题报告、论文定稿到格式排版大家一定都花费了大量的时间和精力&#xff0c;然而有时也会有一点小错误。所以&#xff0c;答辩前怎么准备&#xff0c;答辩的时候应该怎么灵活表现才能让自己最有可能通过答辩呢&#xff1f;…

手机连接服务器传文件在哪里,手机云服务器传文件在哪里

手机云服务器传文件在哪里 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。如果私钥文件丢失了&#xff0c;可以为服务器替换新的密…

本周ASP.NET英文技术文章推荐[03/25 - 03/31]

摘要 本期共有6篇文章&#xff1a; ASP.NET AJAX&#xff1a;客户端事件查看器JavaScript和.NET中的JavaScript对象标记&#xff08;JSON&#xff09;介绍在ASP.NET 2.0应用程序中使用NHibernate和Log4Net在数据Web控件中显示二进制数据为什么异步回送时不能使用文件上传&…

虚拟机服务器断网,Vmware虚拟机断网不能上网的解决方法教程[多图]

vmware虚拟机不能上网怎么办&#xff1f;正常来说在给虚拟机安装了系统之后&#xff0c;虚拟机是可以共享电脑的网络进行上网的&#xff0c;但是最近有用户反映vmware虚拟机出现不能上网的问题&#xff0c;这该怎么办呢&#xff1f;请看下文具体介绍。方法1&#xff1a;1、我们…

本周ASP.NET英文技术文章推荐[09/30- 07/13]:.NET Framework、JSON、Google Analytics、文件上传、GridView、IIS 7、Web开发...

摘要 本期共有9篇文章&#xff1a; .NET Framework源代发发布Tip/Trick&#xff1a;在.NET 3.5中编写ToJSON扩展方法在Google Analytics中统计访客浏览器的Silverlight启用状况使用文本编辑器开发并部署ASP.NET Web应用程序在ASP.NET 2.0中编写类似Gmail的文件上传系统各种非…

深入剖析Redis系列(四) - Redis数据结构与全局命令概述

前言Redis 提供了 5 种数据结构。理解每种数据结构的特点&#xff0c;对于 Redis 的 开发运维 非常重要&#xff0c;同时掌握 Redis 的 单线程命令处理 机制&#xff0c;会使 数据结构 和 命令 的选择事半功倍。接下来的几篇文章&#xff0c;将从如下几个方面介绍 Redis 的几种…

网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...

现在很多用户保存文件都会选择保存到网盘&#xff0c;喜欢的音乐也是一样&#xff0c;网易云音乐早已引入了云盘功能&#xff0c;不过上传的方法相信有很多朋友都不知道&#xff0c;下面小编为大家带来网易云音乐把音乐上传到云盘的步骤方法&#xff0c;感兴趣的朋友可以进来了…

MOSS 2007基础:内容类型(Content Type)之二

原文地址&#xff1a;http://www.msd2d.com/Content/Tip_viewitem_03NoAuth.aspx?ida14f3443-c394-4950-a048-8394bcce749b&sectionSharepoint 上次&#xff0c;我们说到MOSS 2007中的内容类型。下面我们将继续该话题&#xff0c;更深入了解其特性。在开始之前&#xff0c…

结对作业

1、要求地址 博客要求地址&#xff1a;https://www.cnblogs.com/happyzm/p/9626779.htmlFork码云项目地址&#xff1a;https://gitee.com/YeHei/PairProject-Java/tree/master结对伙伴&#xff1a;余硕铭 博客地址&#xff1a;https://gitee.com/hellolv/PersonalProject-Java2…

spring boot druid 监控没有sql记录

2019独角兽企业重金招聘Python工程师标准>>> 1 之前配置了 druid的监控 但是 调用查询后 监控没有记录&#xff0c;查了下原因 发现是因为依赖打入错误 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starte…

用树莓派和PC机搭建多节点私人以太坊网络

发现国内很少有树莓派和电脑组建的私人区块链&#xff0c;所以在自己做实验的过程中记录下来分享给大家,第一次写博客&#xff0c;哈哈 以太坊私有链搭建&#xff08;电脑&#xff0c;树莓派端都适用&#xff09; &#xff08;1&#xff09;新建一个文件夹&#xff0c;例如myc…

FusionInsight LibrA V100R002C80SPC300安装指南

FusionInsight LibrA是企业级的大规模并行处理关系型数据库。FusionInsight LibrA采用MPP(Massive Parallel Processing)架构&#xff0c;支持行存储与列存储&#xff0c;提供PB(Petabyte&#xff0c;2的50次方字节)级别数据量的处理能力。FusionInsight LibrA在核心技术上跟传…

云托管,边缘物理计算托管物理计算,你所需要了解的……

随着业务发展&#xff0c;传统数据中心建设复杂性越来越高&#xff0c;基建的管理、设备的繁杂、人力成本的提升&#xff0c;是否让你的运维成本越来越高&#xff1f;企业生产效率却越来越低&#xff1f; 业务快速发展&#xff0c;设备采购周期冗长&#xff0c;大量采购造成CAP…

软件设计师09-面向对象-用例图

感谢任铄老师滴视频 用例图 1&#xff09;描述一组用例、参与者及它们之间的关系 2&#xff09;用例模型用于需求分析阶段 3&#xff09;关系&#xff08;依赖关系&#xff09;&#xff1a;1&#xff09;包含&#xff08;include&#xff09; 1&#xff09;两个以上用例具有共同…