如何对包含表示文件名的字符串的集合进行排序
本文关键字:字符串 集合 排序 文件名 包含 表示 | 更新日期: 2023-09-27 18:25:23
我有一个包含500个文件的文件夹。每个文件名都是一个int=>,这意味着每个文件名例如都是1.txt或40.txt
在我的代码中,我将所有这些文件名加载到数组中
string[] allFiles = Directory.GetFiles(folderPath, "*.txt");
现在我需要对文件进行排序,方法是文件名是排序密钥(1.txt
)
怎么做?
API目录有排序,但如果这没有正确处理字符串(意思是"1.txt"后面跟着"10.txt"而不是"2.txt"),你可以尝试这个:
string[] allFiles = Directory.GetFiles(folderPath, "*.txt")
.OrderBy(file =>
int.Parse(file.Substring(0, file.Length - 4)))
.ToArray();
这假设所有文件的格式都是正确的。如果这是有问题的,也许你想要这样的东西:
string[] allFiles = Directory.GetFiles(folderPath, "*.txt")
.Select(file => {
var fileNamber;
if(!int.TryParse(
file.Substring(0, file.Length - 4), out fileNamber)
return (int?)null;
return (int?)fileNamber;
})
.Where(fileNamber => fileNamber.HasValue)
.OrderBy(fileNamber => fileNamber.Value)
.Select(fileNamber => fileNamber.Value + ".txt")
.ToArray();
var result = allFiles.OrderBy(f => Int32.Parse(f.Split(new char[] { '.' })[0]));
如果你确定总是有500个文件,并且它们的名称从1.txt
到500.txt
,那么你可以简单地手动生成数组,而不是扫描目录:
string[] allFiles = Enumerable
.Range(1, 500)
.Select(i => Path.Combine(folderPath, $"{i}.txt"))
.ToArray();
否则,将不带扩展名的文件名解析为int进行排序:
string[] allFiles = Directory
.GetFiles(folderPath, "*.txt")
.OrderBy(x => int.Parse(x.Substring(0, x.Length - 4)))
.ToArray();