最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#對(duì)文件名智能排序的算法

 更新時(shí)間:2022年06月17日 14:15:00   作者:天方  
這篇文章介紹了C#對(duì)文件名智能排序的算法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在文件夾中,我們經(jīng)常有類似s_1.txt、s_2.txt、s_10.txt、s_11.txt這樣的命名方式,我們期望的排序方式是s_1.txt、s_2.txt、s_10.txt、s_11.txt(Vista & Windows7是這種方式),然而,按照常規(guī)的字符串排序算法的到的結(jié)果是s_1.txt、s_10.txt、s_11.txt、s_2.txt(Windows XP是這種方式)。

要實(shí)現(xiàn)方式1所需要的智能排序效果,我們的排序算法需要滿足如下規(guī)則:

  • 非數(shù)字部分按照字符串排序

  • 數(shù)字部分按照大小排序

  • 規(guī)則1的優(yōu)先級(jí)高于規(guī)則2的優(yōu)先級(jí)

這個(gè)規(guī)則看起來(lái)簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)卻不是那么容易,因?yàn)槲覀兊奈募麤](méi)有太大的約束,許多文件名時(shí)多段式字符串和數(shù)字混合在一起的,文件名之間也沒(méi)有規(guī)律可循。由于今天寫(xiě)個(gè)小程序的時(shí)候需要這種功能,我在網(wǎng)上找了一下,沒(méi)有什么合適的通用算法,便自己寫(xiě)了一個(gè)(實(shí)際上寫(xiě)了好幾個(gè),這個(gè)是最滿意的一個(gè))。

算法的原理很簡(jiǎn)單。

  • 將字符串中的數(shù)字左側(cè)填充0,變成定長(zhǎng)的文件名。
    上述文件被命名為s_01.txt、s_02.txt、s_10.txt、s_11.txt

  • 將新文件名按照默認(rèn)字符串排序算法排序

代碼如下:

static Regex digitRegex = new Regex(@"\d+");
static string[] SmartSort(IEnumerable<string> files)
{
    //這里只傳文件名,以避免不必要的開(kāi)銷,不同的文件夾的文件沒(méi)有智能排序的必要
    var maxLength = files.Max(file => digitRegex.Matches(file).Cast<Match>().Max(num => num.Length));

    var query = from file in files
                let sortFile = digitRegex.Replace(file, m => m.Value.PadLeft(maxLength, '0'))
                orderby sortFile
                select file;

    return query.ToArray();
}

static void Main(string[] args)
{
    var files = Directory.GetFiles(@"R:\22").Select(i=>Path.GetFileName(i));

    Console.WriteLine(string.Join("\r\n", SmartSort(files)));
}

這個(gè)算法可用于文件夾或同種類型的文件排序,對(duì)于不同的類型的文件的智能排序,還需要在linq查詢的時(shí)候加上一個(gè)分組的功能,這里就懶得寫(xiě)了。

這個(gè)算法談不上高效(這個(gè)算法只用來(lái)對(duì)一個(gè)文件夾下的所有文件排序,實(shí)際上也不存在什么效率問(wèn)題),但卻是我嘗試的幾種算法中最簡(jiǎn)單的一個(gè),也是我最滿意的一個(gè),目前沒(méi)有發(fā)現(xiàn)什么bug,如果誰(shuí)有更合適的算法,歡迎指教。

到此這篇關(guān)于C#對(duì)文件名排序的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • DataGridView帶圖標(biāo)的單元格實(shí)現(xiàn)代碼

    DataGridView帶圖標(biāo)的單元格實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了DataGridView帶圖標(biāo)的單元格的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#解決多IfElse判斷語(yǔ)句和Switch語(yǔ)句問(wèn)題的方法分享

    C#解決多IfElse判斷語(yǔ)句和Switch語(yǔ)句問(wèn)題的方法分享

    這篇文章主要為大家介紹C#如何使用設(shè)計(jì)模式中的策略模式和委托來(lái)解決多個(gè)IfElse判斷語(yǔ)句和Switch語(yǔ)句,這種替換方式在其他語(yǔ)言也一樣可以做到,感興趣的可以了解一下
    2022-12-12
  • C#中常用的正則表達(dá)式

    C#中常用的正則表達(dá)式

    本文主要介紹了C#中常用的正則表達(dá)式。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • C#中的協(xié)變與逆變小結(jié)

    C#中的協(xié)變與逆變小結(jié)

    這篇文章主要介紹了C#中的協(xié)變與逆變的相關(guān)知識(shí),在泛型或委托中,如果不使用協(xié)變或逆變,那么泛型類型是一個(gè)固定類型,而使用協(xié)變或逆變的話,則泛型類型可以實(shí)現(xiàn)多態(tài)化,需要的朋友可以參考下
    2021-10-10
  • C#實(shí)現(xiàn)剪刀石頭布游戲

    C#實(shí)現(xiàn)剪刀石頭布游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)剪刀石頭布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 通過(guò)C#實(shí)現(xiàn)獲取PDF頁(yè)面大小、方向和旋轉(zhuǎn)角度

    通過(guò)C#實(shí)現(xiàn)獲取PDF頁(yè)面大小、方向和旋轉(zhuǎn)角度

    在處理PDF文件時(shí),了解頁(yè)面的大小、方向和旋轉(zhuǎn)角度等信息對(duì)于PDF的顯示、打印和布局設(shè)計(jì)至關(guān)重要,本文將介紹如何使用免費(fèi).NET?庫(kù)通過(guò)C#來(lái)讀取PDF頁(yè)面的這些屬性,需要的朋友可以參考下
    2024-08-08
  • 如何使用C#讀寫(xiě)鎖ReaderWriterLockSlim

    如何使用C#讀寫(xiě)鎖ReaderWriterLockSlim

    這篇文章向大家介紹了讀寫(xiě)鎖ReaderWriterLockSlim,其優(yōu)點(diǎn)就是多個(gè)線程可以同時(shí)讀取該對(duì)象,要了解更多讀寫(xiě)鎖的知識(shí),仔細(xì)閱讀下文吧
    2015-07-07
  • 基于C#實(shí)現(xiàn)的輕量級(jí)多線程隊(duì)列圖文詳解

    基于C#實(shí)現(xiàn)的輕量級(jí)多線程隊(duì)列圖文詳解

    這篇文章主要給大家介紹了關(guān)于基于C#實(shí)現(xiàn)的輕量級(jí)多線程隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • C#使用oledb操作excel文件的方法

    C#使用oledb操作excel文件的方法

    這篇文章主要介紹了C#使用oledb操作excel文件的方法,涉及C#中oledb操作excel的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#服務(wù)生命周期:Singleton、Scoped、Transient用法及說(shuō)明

    C#服務(wù)生命周期:Singleton、Scoped、Transient用法及說(shuō)明

    文章介紹了三種服務(wù)生命周期:?jiǎn)卫?、作用域和瞬態(tài),并討論了如何在ASP.NETCore中使用這些生命周期管理服務(wù),單例在應(yīng)用程序生命周期中只有一個(gè)實(shí)例,作用域在每個(gè)請(qǐng)求中創(chuàng)建一個(gè)新實(shí)例,瞬態(tài)每次請(qǐng)求時(shí)創(chuàng)建一個(gè)新實(shí)例
    2025-01-01

最新評(píng)論

莎车县| 福清市| 隆尧县| 临邑县| 郑州市| 营山县| 蒙山县| 平南县| 潜山县| 林州市| 南汇区| 乌鲁木齐市| 楚雄市| 纳雍县| 钟祥市| 永济市| 大方县| 厦门市| 天水市| 奇台县| 修武县| 靖州| 黄冈市| 武川县| 鹤庆县| 张家港市| 沧源| 永泰县| 丹棱县| 清徐县| 新野县| 米脂县| 宜春市| 汉源县| 彰化市| 滨州市| 九龙坡区| 黄骅市| 绍兴县| 泰宁县| 邵阳县|