iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#对文件名智能排序的算法
  • 907
分享到

C#对文件名智能排序的算法

2024-04-02 19:04:59 907人浏览 八月长安
摘要

在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.txt、s_2.txt、s_10.txt、s_

在文件夹中,我们经常有类似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所需要的智能排序效果,我们的排序算法需要满足如下规则:

  • 非数字部分按照字符串排序

  • 数字部分按照大小排序

  • 规则1的优先级高于规则2的优先级

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

算法的原理很简单。

  • 将字符串中的数字左侧填充0,变成定长的文件名。
    上述文件被命名为s_01.txt、s_02.txt、s_10.txt、s_11.txt

  • 将新文件名按照默认字符串排序算法排序

代码如下:

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查询的时候加上一个分组的功能,这里就懒得写了。

这个算法谈不上高效(这个算法只用来对一个文件夹下的所有文件排序,实际上也不存在什么效率问题),但却是我尝试的几种算法中最简单的一个,也是我最满意的一个,目前没有发现什么bug,如果谁有更合适的算法,欢迎指教。

到此这篇关于C#对文件名排序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#对文件名智能排序的算法

本文链接: https://www.lsjlt.com/news/151826.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#对文件名智能排序的算法
    在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.txt、s_2.txt、s_10.txt、s_...
    99+
    2024-04-02
  • C#怎么对文件名智能排序
    这篇文章主要介绍“C#怎么对文件名智能排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么对文件名智能排序”文章能帮助大家解决问题。在文件夹中,我们经常有类似s_1.txt、s_2.txt、s...
    99+
    2023-07-02
  • c++常用的排序算法有哪些
    小编给大家分享一下c++常用的排序算法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c++常用的排序算法//选择排序法SelectionSort(int a...
    99+
    2023-06-03
  • C++STL函数和排序算法的快排以及归并排序详解
    目录一、队列是什么?二、排序算法1.快速排序2、归并排序总结一、队列是什么? 头文件queue主要包括循环队列queue和优先队列priority_queue两个容器。 像栈一样,队...
    99+
    2024-04-02
  • 详解C++实现链表的排序算法
    目录一、链表排序二、另外一种链表排序方式三、比较两种排序的效率四、下面通过交换结点实现链表的排序一、链表排序 最简单、直接的方式(直接采用冒泡或者选择排序,而且不是交换结点,只交换数...
    99+
    2024-04-02
  • C++程序操作文件对话框的方法
    目录1、调用GetOpenFileName接口启动打开文件对话框1.1、OPENFILENAME结构体说明1.2、设置支持文件多选,控制选择文件的个数上限1.3、从OPENFILEN...
    99+
    2024-04-02
  • c/c++基础简单易懂的快速排序算法
    快速排序就是找一个基准,然后其左边要比他小,右边要比他大 int partition(int* a, int left, int right) { int pivot = le...
    99+
    2024-04-02
  • 排序算法的性能提升方法有哪些
    本篇内容介绍了“排序算法的性能提升方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!冒泡排序这是最简...
    99+
    2024-04-02
  • 排序算法及其C实现是怎样的
    这期内容当中小编将会给大家带来有关排序算法及其C实现是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。排序算法(Sorting Algorithm)是计算机算法的一个组成部分。排序的目标是将一组数据 ...
    99+
    2023-06-04
  • C语言之直接插入排序算法的方法
    目录一、什么是直接插入排序二、代码讲解总结 直接 插入排序 (Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从...
    99+
    2024-04-02
  • C/C++浅析邻接表拓扑排序算法的实现
    目录前言一、拓扑排序算法的思路二、实现步骤1.求个顶点的入度2.拓扑排序的实现三、测试结果总结前言 在软件开发、施工过程、教学安排等等的一系列活动中,往往需要一个有向无环图来表示其是...
    99+
    2024-04-02
  • C++ 递归函数在排序算法中的应用?
    c++++ 中递归函数在排序算法中的应用通过递归函数实现的插入排序和归并排序算法,可以将复杂的问题分解为更小的子问题,并通过递归调用高效地解决。插入排序:通过逐个插入元素,将数组有序化。...
    99+
    2024-04-17
    c++ 递归函数
  • 一文快速掌握Java中的搜索算法和排序算法
    目录一、搜索算法二分算法二、排序算法冒泡排序选择排序插入排序快速排序一、搜索算法 二分算法 二分算法(Binary Search)又称折半查找,是一种高效的查找算法。它的基本思想是:...
    99+
    2023-05-14
    Java搜索算法 Java排序算法 Java算法
  • c语言实现的几种常用排序算法
    概述 最近重新回顾了一下数据结构和算法的一些基本知识,对几种排序算法有了更多的理解,也趁此机会通过博客做一个总结。 1.选择排序-简单选择排序 选择排序是最简单的一种基于O(n2)时...
    99+
    2024-04-02
  • C语言中有哪些简单的排序算法
    这篇文章主要介绍“C语言中有哪些简单的排序算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中有哪些简单的排序算法”文章能帮助大家解决问题。1.冒泡排序(Bubble Sort)基本思想:冒泡...
    99+
    2023-07-05
  • PHP 数组排序算法对并行处理的影响
    答案:merge_sort 算法在并行处理中性能优于 sort() 算法。详细描述:数组排序算法的选择影响并行处理性能。php 提供了多种排序算法,包括 sort() 和 merge_s...
    99+
    2024-04-28
    排序算法 php 冒泡排序
  • linux怎么对文件中的数据进行排序
    在Linux中,可以使用`sort`命令对文件中的数据进行排序。`sort`命令的基本语法如下:```sort [OPTION].....
    99+
    2023-09-11
    linux
  • C/C++实现快速排序算法的两种方式实例
    目录介绍流程如下实现方式一方式二总结介绍 快速排序是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序。 流程如下 (图片来自百度) 实现 以下有两种实现方式,说是...
    99+
    2024-04-02
  • Win10提示文件名对目标文件夹可能太长的解决方法
    小编给大家分享一下Win10提示文件名对目标文件夹可能太长的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!大家都知道,有时候win10系统弹出“文件名对目...
    99+
    2023-06-10
  • 一文掌握 C++ 智能指针的使用方法
    目录一、RAII 与引用计数二、std::shared_ptr三、std::unique_ptr四、std::weak_ptr五、总结 一、RAII 与引用计数 了解 Objecti...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作