2009-03-25 31 views
1

私が言う発注必要リストを持っている:C#正規表現は、文字と数字の文字列を並べ替え

R1-1 
R1-11 
R2-2 
R1-2 

これを注文する必要があります。

R1-1 
R1-2 
R1-11 
R2-2 

現在、私はC#Regex.Replaceメソッドを使用していますし、文字列の最後に単一数字が現れる前に0を追加します。

Regex.Replace(inString,@"([1-9]$)", @"0$2") 

I'm sur e私はちょうど把握することができないこれを行うためのより良い方法があります。 誰も正規表現で文字と数字の文字列をソートする良い方法がありますか?

public static List<Rack> GetRacks(Guid aisleGUID) 
    { 
     log.Debug("Getting Racks with aisleId " + aisleGUID); 
     List<Rack> result = dataContext.Racks.Where(
           r => r.aisleGUID == aisleGUID).ToList(); 
     return result.OrderBy(r => r.rackName, new NaturalStringComparer()).ToList(); 
    } 

答えて

4

私は何を後にしていることは自然なソート順序だと思う、のように:私はこれを完了するには、以下のグレッグのメソッドを使用し、ちょうど私が、私は完全にするために使用していたコードを追加する必要があります考えている


Windowsエクスプローラは動作しますか?もしそうなら、私はブログエントリを書いて、後でhow you can achieve this in a few lines of C#を表示しました。

注:リンクされたエントリ内のNaturalStringComparerをチェックして使用すると、サンプル文字列で検索した順序が返されます。

+0

グレート答えグレッグ!私は今、このソリューションを使用して、私は私の質問に完全性のために使用しているメソッドを追加します。 – bobwah

+0

ええ、グレートグレー!リンクがあまりにも悪いです –

+0

新しいリンク:http://gregbeech.com/blog/natural-sort-order-of-strings-and-files –

2

コンパレータを作成し、正規表現を使用して最初の数字が等しい場合は、最初に "R"と " - "の間の数字を、その後に " - "の後の数字を比較できます。

スケッチ:

public int Compare(string x, string y) 
{ 
    int releaseX = ...; 
    int releaseY = ...; 
    int revisionX = ...; 
    int revisionY = ...; 

    if (releaseX == releaseY) 
    { 
     return revisionX - revisionY; 
    } 
    else 
    { 
     return releaseX - releaseY; 
    } 
} 
+0

編集:うーん..グレッグビーチの解決策は素晴らしいです! - DllImportの使用を避けたい場合は、これを解決する方法としてこれを使用してください。 – chiccodoro

+0

お返事ありがとうございます!私はGregのソリューションを使用しましたが、他の人の参考にこれを持っていいです。 – bobwah

関連する問題