LINQ を使用した英数字の並べ替え
数値を含む文字列を処理する場合、LINQ の既定のアルファベットによる並べ替えでは望ましい結果が得られない場合があります。次の例を考えてみましょう。
string[] partNumbers = new string[] { "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" }; var result = partNumbers.OrderBy(x => x);
期待される結果は次のように文字列を並べます。
AB1 AB2 AB11 ...
ただし、デフォルトの文字列の順序付けは辞書編集順に従うため、実際の結果は異なります。これは、数値が左から右に比較され、次のような順序になることを意味します:
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
目的の英数字の並べ替えを実現するには、比較ロジックを変更する必要があります。各文字列の数値部分を特定の数のゼロで埋めることができます。これにより、数値の長さに関係なく、数値が公平に比較されるようになります。
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); } var result = partNumbers.OrderBy(x => PadNumbers(x));
この変更された順序では、文字列の数値部分が埋め込まれた値に基づいて比較され、次のような正しい順序になります。
AB1 AB2 AB11 ...
このアプローチでは、入力内の数値の最大桁数が想定されていることに注意してください。指定されたパディングよりも多くの桁の数値がある場合、並べ替えが正確に行われない可能性があります。
以上がLINQ では、数字を含む文字列の正しい英数字並べ替えをどのように実現できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。