问题:
给定一个字符串数组,其中每个元素都结束使用数值时,目标是按字母数字顺序对数组进行排序,并优先考虑其中的数字顺序
示例:
考虑字符串数组:
partNumbers = ["ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11"]
使用 LINQ 的 OrderBy 方法,得到想要的排序结果是:
["AB1", "AB2", "AB11", ... ]
问题:
但是,默认排序机制将数字视为字符串,导致以下输出:
["AB1", "Ab11", "AB2", "ABC1", "ABC10", "ABC10", "ABC11", "ABC2"]
解决方案:
纠正此问题问题,有必要在排序子句中填充字符串的数字部分。这样,OrderBy 就将数字视为数字,而不是字符串。下面的代码片段演示了这种方法:
var result = partNumbers.OrderBy(x => PadNumbers(x));
PadNumbers 方法:
PadNumbers 方法实现如下:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
说明:
此方法识别和用零填充输入字符串中的所有数字序列,假设最大数字长度为 10。此填充可确保在排序过程中将数值视为数字,同时保留原始字符串数据。
输出:
使用PadNumbers方法,数组已正确排序如下:
["AB1", "AB2", "AB11", ... ]
通过应用此填充技术,您可以使用 LINQ 实现精确的字母数字排序,其中数字值在每个元素内优先排序。
以上是如何使用 LINQ 的 OrderBy 方法对包含数字的字符串进行正确的字母数字排序?的详细内容。更多信息请关注PHP中文网其他相关文章!