当前位置:网站首页>利用Lambda表达式解决c#文件名排序问题(是100大还是11大的问题)
利用Lambda表达式解决c#文件名排序问题(是100大还是11大的问题)
2022-04-23 06:26:00 【大可山人】
1、问题背景:
有时需要对输出的文件列表进行排序,如直接使用List<T>.Sort()方法排序时,遇到9, 10,11和100排序的问题,往彺会出现2.xxx大于100.xxx (其中,xxx代表文件的后缀名) 等类似的情形,这明显不是我们要想的。
另外,在同一组文件中,假如都以: NNN_1_ABC.xxx,NNN_2_ABC.xxx……NNN_NNNN_ABC.xxx等形式(其中N为数字),此时,在NNN相同情况下,我们希望NNN_100比NNN_2 要“大”。
比如下面的文件列表,就是直接使用List<T>.Sort()方法排序产生的:
D:\ChineseCalendar\AI_样式\OK\00_CoverFM封面\00FM_01+圆形光盘+竖向.svg
D:\ChineseCalendar\AI_样式\OK\00_CoverFM封面\00FM_02_牛皮纸背景+蛇圈台历+新年快乐+大片小文字广告+普通广告.svg
………………// 这里还有一些文件(下"//"同)……………………
D:\ChineseCalendar\AI_样式\OK\00_CoverFM封面\00FM_19+彩色树叶+曲线+左中右上部广告.svg
………………// ……………………
D:\ChineseCalendar\AI_样式\OK\02\02_小朋友_蓝天白云向日葵等12月历.svg
………………// ……………………
D:\ChineseCalendar\AI_样式\OK\09\09_左上小图+右上横向大图+左下文字广告+右下含周序号单月历x12_OK.svg
D:\ChineseCalendar\AI_样式\OK\10\10_铁夹+两边花纹+中间12月年历+底部广告.svg
………………// ……………………
D:\ChineseCalendar\AI_样式\OK\100\100_HappyFall+(2x2+4x2)=12月历.svg
………………// ……………………
D:\ChineseCalendar\AI_样式\OK\109\109_渐变标签+3x2=6月历半年历.svg
D:\ChineseCalendar\AI_样式\OK\11\11_Calendar圆形贴纸_OK.svg
我们希望是0-9-10-11...100-101..200...201...,而不是上面那样。
2、解决方法:
先贴代码:
/// <summary>
/// 对List<string>文件列表排序
/// </summary>
/// <param name="listSvgFiles">List<string>文件列表排序</param>
/// <param name="isOrderByDesc">是否倒序</param>
/// <returns>排序结果</returns>
private static List<string> GetOrderListOfSvgFiles(List<string> listSvgFiles, bool isOrderByDesc)
{
//先利用Lambda表达式正序排列
List<string> orderedFile = (from s in listSvgFiles
let Split = s.Split('_')
let Str = Path.GetFileName(s)
where Str.IndexOf("FM") >= 0 || Regex.IsMatch(Str, @"\b\d+")
select s)
.OrderBy(x => int.Parse(Path.GetFileName(x).Split('_')[0].TrimEnd("FM".ToCharArray())))
.ThenBy(y => Path.GetFileName(y).Split('_')[1])
.ToList();
//如果逆序排列
if (isOrderByDesc)
{
orderedFile.Reverse();
}
return orderedFile;
}
说明:这里用加粗文字表示重点,同时,如你有不同需求,可以根据实际需要修改。
//调用方法:
List<string> orderedFileList = GetOrderListOfSvgFiles(listSvgFiles, isOrderByDesc);
最后,让我们来个时光穿越。这是最近做的未来几千年的年历样本,嘿嘿!!

版权声明
本文为[大可山人]所创,转载请带上原文链接,感谢
https://blog.csdn.net/johnsuna/article/details/121198671
边栏推荐
- (扩展)BSGS与高次同余方程
- Visualization Road (IX) detailed explanation of arrow class
- How to judge whether a point is within a polygon (including complex polygons or a large number of polygons)
- Processing of common dependency module
- 配置npm
- 反思|开启B站少女心模式,探究APP换肤机制的设计与实现
- SAP PI/PO rfc2RESTful 发布rfc接口为RESTful示例(Proxy间接法)
- Moment. Format of format method function in JS
- 移动布局(flex布局、视口标签)
- 9.常用函数
猜你喜欢

简易随机点名抽奖(js下编写)

int a = 1存放在哪

Django uses MySQL database to solve error reporting

Authorization+Token+JWT

Simple random roll call lottery (written under JS)

SAP CR传输请求顺序、依赖检查

King glory - unity learning journey

SAP PI/PO Soap2Proxy 消费外部ws示例

Solutions to common problems in visualization (VII) solutions to drawing scale setting

On BFC (block formatting context)
随机推荐
Solutions to common problems in visualization (VII) solutions to drawing scale setting
2. Restricted query
每日一题 | 曾被反转链表支配的恐惧
3. Sort statement
7.子查询
Visualization Road (IX) detailed explanation of arrow class
Thorough inquiry -- understanding and analysis of cocos2d source code
Reflect on the limitations of event bus and the design and implementation of communication mechanism in component development process
js之函数的两种声明方式
js之DOM事件
判断字符串首尾是否包含目标参数:startsWith()、endsWith()方法
int a = 1存放在哪
js之DOM学习三种创建元素的方式
Ogldev reading notes
防抖和节流
Two threads print odd and even numbers interactively
学会使用搜索引擎
Date object (JS built-in object)
Nacos/sentinel网关限流和分组 (代码)
反思 | Android 音视频缓存机制的系统性设计