使用数字对字符串进行排序时,排序方法出现问题
本文关键字:排序 方法 问题 数字 字符串 | 更新日期: 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();