使用数字对字符串进行排序时,排序方法出现问题

本文关键字:排序 方法 问题 数字 字符串 | 更新日期: 2023-09-27 17:59:16

我正在尝试按字母顺序对填充有字符串的ArrayList进行排序。当我调用Sort方法时,字母表似乎排序很好,但当涉及数字时,Sort方法似乎排序不正确。

以这个代码为例:

ArrayList list = new ArrayList ();
list.Add ("img149");
list.Add ("img15");
list.Add ("a");
list.Sort ();
for (int i = 0; i < list.Count (); i++) {
    Console.WriteLine (list [i]);
}

这似乎是打印出来的:

a
img_149
img_15

字符串"a"的排序很好,但其他两个字符串的排序不正确。我想我理解为什么"4"在"5"之前,然而,149确实高于15,在这种情况下,带15的字符串应该首先打印。

对于我的情况,我永远不知道字符串会是什么(字符串代表我程序中的文件名),而且至关重要的是,名称按字母顺序排列,数字按顺序排列(1、2、150、300等)。有人知道如何纠正这一点吗?

使用数字对字符串进行排序时,排序方法出现问题

排序正确。试试这个:

List<string> sortedFileNames = list.Cast<string>().OrderBy(s =>
{
    string numericStr = Regex.Match(s, @"'d+").Value;
    if (numericStr == "")
    {
        return s; // file name does not include number, so just sort by actual file name.
    }
    else
    {
        return s + numeric.PadLeft(10, '0'); // file name includes numbers, so sort by file name with number zero-padded to fixed length of 10.
    }
}).ToList();