日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

智能文件名排序

發(fā)布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能文件名排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

默認排序問題

windows排序

Windows的資源管理中,提供了文件名的智能排序功能,可以識別出文件名中數(shù)字(數(shù)字位數(shù)不相同),然后比較數(shù)字大小進行排序,如下圖:

代碼默認排序

但在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中的數(shù)字MatchCollection matchList2 = Regex.Matches(s2, @"\d+");//找出字符串s2中的數(shù)字int minCount = matchList1.Count >= matchList2.Count ? matchList2.Count : matchList1.Count;for (int i = 0; i < minCount; i++){//循環(huán)數(shù)字一一比較if (matchList1[i].Index != matchList2[i].Index)break;//數(shù)字位置不同,直接使用字符串比較if (s1.Substring(0, matchList1[i].Index) != s2.Substring(0, matchList2[i].Index))break;//數(shù)字之前字符不同,直接使用字符串比較if (matchList1[i].Value == matchList2[i].Value)continue;//數(shù)字相同時,比較下一組數(shù)字int s = matchList1[i].Value.Length - matchList2[i].Value.Length;if (s == 0)break;//數(shù)字位數(shù)相同,直接使用字符串比較string temp = "";if (s > 0) //這里不直接比較數(shù)字,是為了對數(shù)字之后的字符串再進行比較 {//當s1的數(shù)字長度大于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的數(shù)字長度小于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

總結

以上是生活随笔為你收集整理的智能文件名排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。