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

时间:2016-07-28 20:17:02

标签: c# sorting methods

我正在尝试按字母顺序对填充了字符串的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,等等。)。有没有人对如何纠正这个有任何想法?

1 个答案:

答案 0 :(得分:0)

It is sorting correctly. Try this:

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