3

重複の可能性:
C# での自然な並べ替え順序

Windowsと同じようにファイルを名前でソートするコードを探していましたが、

私のディレクトリにはファイルが含まれています"SD-Patch-1.sql", "SD-Patch-2.sql" ..., "SD-Patch-10.sql"が、これはWindowsがファイルをフォーマットする方法ですが、私のアプリケーションでは名前でソートするとファイルがソートされます

SD-Patch-1.sql
SD-Patch-10.sql
... to 19
SD-Patch-2.sql

Windowsと同じソートを取得して上記のimを使用するにはどうすればよいですか

FileInfo[] files = dirInfo.GetFiles();
Array.Sort(files, (f1, f2) => f1.Name.CompareTo(f2.Name));
4

1 に答える 1

-1

sort パラメータでカスタム比較子を使用する必要があります

list.Sort(new customComparer());

Comparer は次のようになります。

class customComparer: IComparer<Object>
{
  public int Compare(Object obj1, Object obj2)
  {
    //implament your own code for sorting any way you want
  }
}

あなたのケースのコードの一例は、次のようになります。

次のように、それぞれを対応する番号にマッピングする辞書を作成します。

//Mapping between file name characters and their corresponding number of choice
Dictionary<char, int> alphaNumDict = new Dictionary<char, int>()
                                                  {
                                                      {'a',1},
                                                      {'b',2},
                                                      {'c',3},
                                                      {'d',4},
                                                      {'e',5}
                                                      ...
                                                  };

次に、単純な方法を使用して文字列を数値に変更し、文字列の値を比較できます。

//iterate over the string and convert it to a corresponding number
double sum =0;
for (int i = 0; i < myString.Length; i++)
{
    sum += alphaDict[myString[i]] * Math.Pow(10, i);
}

あとは、取得した数値と返された数値のどちらが大きいかを比較するだけです。

于 2012-05-14T12:03:43.973 に答える