ホームページ >バックエンド開発 >C++ >LINQ を使用して、数字の接尾辞を持つ英数字の文字列を正しく並べ替えるにはどうすればよいですか?

LINQ を使用して、数字の接尾辞を持つ英数字の文字列を正しく並べ替えるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 03:47:42744ブラウズ

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 を使用して、数字の接尾辞を持つ英数字の文字列を正しく並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。