📅  最后修改于: 2023-12-03 14:49:37.726000             🧑  作者: Mango
在许多情况下,需要对文件名进行排序以便更容易地找到文件或按字母顺序显示它们。C# 提供了一个方便的排序方法来完成这个任务。
string[] fileNames = new string[] { "file1.txt", "file22.txt", "file3.txt", "file10.txt" };
Array.Sort(fileNames);
Console.WriteLine(string.Join(", ", fileNames));
运行上面代码可以看到输出结果为:
file1.txt, file10.txt, file22.txt, file3.txt
可以看到,这段代码用了 Array.Sort
方法对文件名进行了排序,结果是按字母顺序排列的。
上面的代码中,文件名是按照字母顺序排序的,也就是说,它将 "file10.txt" 排在 "file1.txt" 前面。如果你需要按数字类型排序,你需要使用一些特殊的技巧,例如:
fileNames.OrderBy(f => int.Parse(Regex.Match(f, @"\d+").Value)).ThenBy(f => f);
这个代码片段使用了 OrderBy
和 ThenBy
方法对列表进行排序。我们使用正则表达式从每个文件名中提取数字部分,并将其转换为整数类型。我们还可以在排序后,按文件名排一遍序,这样数字相同的文件名会按字母顺序排序。
有时候,你需要进行一些更高级的排序,例如根据文件名的长度、文件大小、文件创建时间等等。在这些情况下,你可以使用 IComparer
接口定义自己的排序规则。
class FileNameLengthComparer : IComparer<string>
{
public int Compare(string x, string y)
{
return x.Length.CompareTo(y.Length);
}
}
这里演示了一个非常简单的 IComparer
实现,根据文件名的长度进行排序。你可以将自己的排序逻辑放在 Compare
方法中,并将该比较器传递给 Array.Sort
方法等排序方法,即可实现对文件名的自定义排序。
以上是 C# 中对文件名排序的基础知识。可以通过 Array.Sort
、OrderBy
和 ThenBy
方法对文件名进行基础排序。如果需要按数字或自定义规则排序,则需要依赖一些额外的技巧或实现 IComparer
接口。