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 サイトの他の関連記事を参照してください。