C#怎么对文件名智能排序

发布时间:2022-06-17 16:23:42 作者:iii
来源:亿速云 阅读:140

这篇文章主要介绍“C#怎么对文件名智能排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么对文件名智能排序”文章能帮助大家解决问题。

在文件夹中,我们经常有类似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是这种方式),然而,按照常规的字符串排序算法的到的结果是s_1.txt、s_10.txt、s_11.txt、s_2.txt(Windows XP是这种方式)。

要实现方式1所需要的智能排序效果,我们的排序算法需要满足如下规则:

这个规则看起来简单,但是实现起来却不是那么容易,因为我们的文件名没有太大的约束,许多文件名时多段式字符串和数字混合在一起的,文件名之间也没有规律可循。由于今天写个小程序的时候需要这种功能,我在网上找了一下,没有什么合适的通用算法,便自己写了一个(实际上写了好几个,这个是最满意的一个)。

算法的原理很简单。

代码如下:

static Regex digitRegex = new Regex(@"\d+");
static string[] SmartSort(IEnumerable<string> files)
{
    //这里只传文件名,以避免不必要的开销,不同的文件夹的文件没有智能排序的必要
    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)));
}

这个算法可用于文件夹或同种类型的文件排序,对于不同的类型的文件的智能排序,还需要在linq查询的时候加上一个分组的功能,这里就懒得写了。

关于“C#怎么对文件名智能排序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. SQL SERVER 对检索结果排序
  2. 使用几种常用排序方法对C#数组进行排序的代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:win10待机蓝屏重启怎么解决

下一篇:Go json怎么自定义Unmarshal避免判断nil

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》