LINQ での英数字の順序付け
LINQ では、OrderBy メソッドは、アルファベットと数字の両方を順番に考慮する辞書編集規則に従います。ただし、数値で終わる文字列を並べ替える場合、この順序では望ましい結果が得られない可能性があります。
次の例を考えてみましょう:
string[] partNumbers = { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" }; var result = partNumbers.OrderBy(x => x);
辞書編集的な順序による実際の結果は、
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
ただし、期待される結果は、数値の接尾辞。これを実現するには、順序付け基準を変更する必要があります。
英数字順に並べ替える鍵は、埋め込まれた数値部分を比較することです。数値にゼロを埋め込むことで、LINQ が数値を適切に区別できるようになります。その方法は次のとおりです。
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
この関数は、入力文字列内の任意の数値にゼロを埋め込みます。この関数を LINQ の順序付け基準として使用すると、期待される結果が得られます。
var result = partNumbers.OrderBy(x => PadNumbers(x));
結果のリストは次のように順序付けされます。
AB1 AB2 AB11 ...
このアプローチでは、最大値が数値部分の桁数はわかっています。より複雑なケースの場合は、比較基準をよりきめ細かく制御できるカスタム IComparer の実装を検討してください。
以上がLINQ で数値サフィックスを使用して英数字の順序付けを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。