首页 > 后端开发 > C++ > LINQ 如何实现包含数字的字符串的正确字母数字排序?

LINQ 如何实现包含数字的字符串的正确字母数字排序?

Susan Sarandon
发布: 2024-12-29 06:59:15
原创
899 人浏览过

How Can LINQ Achieve Correct Alphanumeric Sorting of Strings Containing Numbers?

使用 LINQ 进行字母数字排序

处理包含数值的字符串时,LINQ 中的默认字母排序可能无法产生所需的结果。考虑以下示例:

string[] partNumbers = new string[] 
{ 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" 
};

var result = partNumbers.OrderBy(x => x);
登录后复制

预期结果将对字符串进行如下排序:

AB1
AB2
AB11
...
登录后复制
登录后复制

但是,实际结果有所不同,因为默认字符串排序遵循字典顺序。这意味着数值从左到右进行比较,从而导致以下排序:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2
登录后复制

为了实现所需的字母数字排序,我们需要修改比较逻辑。我们可以用特定数量的零填充每个字符串的数字部分。这确保了数字值的比较是公平的,无论其长度如何。

public static string PadNumbers(string input)
{
    return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));
}

var result = partNumbers.OrderBy(x => PadNumbers(x));
登录后复制

使用此修改后的排序,字符串的数字部分根据其填充值进行比较,从而产生以下正确的排序:

AB1
AB2
AB11
...
登录后复制
登录后复制

请注意,此方法假设输入中的数字有最大位数。如果数字的位数多于指定的填充,则排序可能不准确。

以上是LINQ 如何实现包含数字的字符串的正确字母数字排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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