首頁 > 後端開發 > C++ > 如何在保持字母順序的同時對字串進行數字排序?

如何在保持字母順序的同時對字串進行數字排序?

Barbara Streisand
發布: 2024-12-31 02:19:14
原創
245 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板