首页 > 后端开发 > C++ > 如何使用 LINQ 的 OrderBy 方法对包含数字的字符串进行正确的字母数字排序?

如何使用 LINQ 的 OrderBy 方法对包含数字的字符串进行正确的字母数字排序?

Barbara Streisand
发布: 2024-12-27 20:51:16
原创
879 人浏览过

How Can LINQ's OrderBy Method Be Used for Correct Alphanumeric Sorting of Strings Containing Numbers?

使用 LINQ 进行字母数字排序:了解数值影响

问题:

给定一个字符串数组,其中每个元素都结束使用数值时,目标是按字母数字顺序对数组进行排序,并优先考虑其中的数字顺序

示例:

考虑字符串数组:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板