首页 >后端开发 >C++ >如何使用 LINQ 对带有数字后缀的字母数字字符串正确排序?

如何使用 LINQ 对带有数字后缀的字母数字字符串正确排序?

Barbara Streisand
Barbara Streisand原创
2025-01-03 03:47:42739浏览

How Can I Sort Alphanumeric Strings with Numeric Suffixes Correctly Using LINQ?

使用 LINQ 进行字母数字排序

使用 LINQ 的默认排序机制对字母数字字符串(其中每个元素以数字值结尾)进行排序可能具有挑战性。仅依靠字母顺序排序时就会出现问题,导致意外的排序输出。

考虑以下字符串数组:

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

直接应用 LINQ 的 OrderBy 方法将产生以下排序输出:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2

这个结果与期望的结果有偏差,因为没有考虑最后的数值

解决方案

为了实现预期的排序,需要在排序键中填充字符串的数字部分。这可以使用自定义方法来完成,例如 PadNumbers,定义如下:

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

此方法将输入字符串中的任何数字序列替换为其填充的等效值。通过在 OrderBy 子句中使用此方法,可以有效地标准化数字部分以进行比较:

var result = partNumbers.OrderBy(x => PadNumbers(x));

此方法可确保同等对待数值,无论其长度如何,从而实现所需的字母数字排序:

AB1
AB2
AB11
...

虽然此解决方案假定数字的最大位数,但它提供了一种使用以下方法进行字母数字排序的可靠方法LINQ。

以上是如何使用 LINQ 对带有数字后缀的字母数字字符串正确排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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