問題:
各要素が終了する文字列の配列が与えられた場合数値を使用する場合、目的は配列を英数字順に並べ替え、優先順位を付けることです。各要素内の数値順序。
例:
文字列配列を考えてみましょう:
partNumbers = ["ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11"]
LINQ の OrderBy メソッドを使用すると、目的の並べ替え結果が得られます。は:
["AB1", "AB2", "AB11", ... ]
問題:
ただし、デフォルトの並べ替えメカニズムは数値を文字列として考慮するため、次のような出力が生成されます:
["AB1", "Ab11", "AB2", "ABC1", "ABC10", "ABC10", "ABC11", "ABC2"]
解決策:
これを修正するには問題として、順序付け句の文字列の数値部分を埋め込む必要があります。このように、OrderBy は数値を文字列としてではなく数値そのものとして考慮します。次のコード スニペットは、このアプローチを示しています。
var result = partNumbers.OrderBy(x => PadNumbers(x));
PadNumbers メソッド:
PadNumbers メソッドは次のように実装されます:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
説明:
このメソッドは、最大桁長を 10 と仮定して、入力文字列内のすべての数値シーケンスをゼロで埋めます。この埋め込みにより、元の文字列データが保持されながら、順序付けプロセス中に数値が数値として扱われることが保証されます。
出力:
PadNumbers メソッドを使用すると、配列は正しく並べ替えられます
["AB1", "AB2", "AB11", ... ]
このパディング手法を適用すると、LINQ で正確な英数字の並べ替えを実現でき、各要素内で数値が優先されます。
以上がLINQ の OrderBy メソッドを使用して、数字を含む文字列を正しく英数字で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。