首页 > 后端开发 > C++ > 如何在保持字母顺序的同时对字符串进行数字排序?

如何在保持字母顺序的同时对字符串进行数字排序?

Barbara Streisand
发布: 2024-12-31 02:19:14
原创
235 人浏览过

How to Sort Strings Numerically While Maintaining Alphabetical Order?

在保留字母顺序的情况下对字符串进行数字排序

要解决对数字但无法转换为整数的字符串进行排序的问题,您可以实现自定义排序算法。操作方法如下:

  1. 利用 Enumerable.OrderBy 方法,该方法允许您指定用于排序的自定义比较器。
  2. 创建一个实现IComparer 接口并定义比较逻辑字符串。
  3. 在自定义比较器类中实现 Compare 方法来确定字符串的顺序。
  4. 以下是 SemiNumericComparer 类的示例实现同时考虑数字和字母值:
public class SemiNumericComparer : IComparer<string>
{
    public static bool IsNumeric(string value) => int.TryParse(value, out _);

    public int Compare(string s1, string s2)
    {
        const int S1GreaterThanS2 = 1;
        const int S2GreaterThanS1 = -1;

        var isNumeric1 = IsNumeric(s1);
        var isNumeric2 = IsNumeric(s2);

        // Handle numeric comparisons
        if (isNumeric1 && isNumeric2)
        {
            var i1 = Convert.ToInt32(s1);
            var i2 = Convert.ToInt32(s2);

            return i1 > i2 ? S1GreaterThanS2 : (i1 < i2 ? S2GreaterThanS1 : 0);
        }

        // Handle mixed numeric and non-numeric comparisons
        if (isNumeric1) return S2GreaterThanS1;
        if (isNumeric2) return S1GreaterThanS2;

        // Handle alphabetical comparisons
        return string.Compare(s1, s2, true, CultureInfo.InvariantCulture);
    }
}
登录后复制
  1. 将自定义比较器集成到您的排序逻辑中:
string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" };

foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer()))
{
    Console.WriteLine(thing);
}
登录后复制

此方法允许您在考虑数字的同时按字母顺序对字符串进行排序值,产生所需的输出:

007
90
bob
lauren
paul
登录后复制

以上是如何在保持字母顺序的同时对字符串进行数字排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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