这是因为字符串的默认排序是标准字母数字字典(词典)排序,并且ABC11会先于ABC2,因为排序始终是从左到右进行的。
要获得所需的内容,需要在order by子句中填充数字部分,例如:
var result = partNumbers.OrderBy(x => PadNumbers(x));
在那里
PadNumbers可以定义为:
public static string PadNumbers(string input){ return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));}
这会将输入字符串中出现的任何数字(或多个数字)填充零,这样可以
OrderBy看到:
ABC0000000010ABC0000000001...AB0000000011
填充仅发生在用于比较的键上。原始字符串(不带填充)保留在结果中。
请注意,此方法假定输入中数字的最大位数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)