按名称对文件进行排序 与 C# 中的窗口相同

本文关键字:窗口 排序 文件 | 更新日期: 2023-09-27 18:34:09

可能的重复项:
C# 中的自然排序顺序

我一直在寻找一些代码来按与 Windows 相同的名称对我的文件进行排序,

我的目录包含文件"SD-Patch-1.sql", "SD-Patch-2.sql" ..., "SD-Patch-10.sql"这是Windows格式化它们的方式,但是在我的应用程序中,当按名称排序时,它会对它们进行排序

SD-Patch-1.sql
SD-Patch-10.sql
... to 19
SD-Patch-2.sql

我如何获得与 Windows 相同的排序以使用

FileInfo[] files = dirInfo.GetFiles();
Array.Sort(files, (f1, f2) => f1.Name.CompareTo(f2.Name));

按名称对文件进行排序 与 C# 中的窗口相同

您应该在排序参数中使用自定义比较器

list.Sort(new customComparer());

比较器应如下所示:

class customComparer: IComparer<Object>
{
  public int Compare(Object obj1, Object obj2)
  {
    //implament your own code for sorting any way you want
  }
}

您的案例的一个代码示例可能是休耕。

稍后创建字典映射每个到相应的数字,如下所示:

//Mapping between file name characters and their corresponding number of choice
Dictionary<char, int> alphaNumDict = new Dictionary<char, int>()
                                                  {
                                                      {'a',1},
                                                      {'b',2},
                                                      {'c',3},
                                                      {'d',4},
                                                      {'e',5}
                                                      ...
                                                  };

然后,您可以使用简单的方法将字符串更改为数字并比较字符串的值:

//iterate over the string and convert it to a corresponding number
double sum =0;
for (int i = 0; i < myString.Length; i++)
{
    sum += alphaDict[myString[i]] * Math.Pow(10, i);
}

现在您需要做的就是比较您获得的数字并返回哪个更大