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

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

Susan Sarandon
Susan Sarandon原创
2024-12-29 06:59:15938浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn