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