ホームページ > バックエンド開発 > 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート