3

可能的重复:
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));
4

1 回答 1

-1

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

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);
}

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

于 2012-05-14T12:03:43.973 回答