ホームページ > バックエンド開発 > C++ > LINQ では、数字を含む文字列の正しい英数字並べ替えをどのように実現できるでしょうか?

LINQ では、数字を含む文字列の正しい英数字並べ替えをどのように実現できるでしょうか?

Susan Sarandon
リリース: 2024-12-29 06:59:15
オリジナル
899 人が閲覧しました

How Can LINQ Achieve Correct Alphanumeric Sorting of Strings Containing Numbers?

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

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