ホームページ > バックエンド開発 > C++ > LINQ で数値サフィックスを使用して英数字の順序付けを実現するにはどうすればよいですか?

LINQ で数値サフィックスを使用して英数字の順序付けを実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-29 01:29:11
オリジナル
459 人が閲覧しました

How Can I Achieve Alphanumeric Ordering in LINQ with Numeric Suffixes?

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート