1

タイトルのリストがあり、そのうちのいくつかは数字で始まります (例: ウィジェットを作成する 5 つの方法)。タイトルは変えずに「5つの方法…」として並べ替えたいと思います。一部の映画の場所でこれが行われていることはわかっていますが、オンラインでその方法に関する情報を見つけることができません. 何か案は?

4

4 に答える 4

3

元のタイトルとスペルアウトされたタイトルの両方を保存します。

select OriginalTitle from Movies order by spelledTitle

参照:整数を文字数に変換する

于 2010-02-20T00:18:40.580 に答える
1

カスタム比較機能を作成するには、http://support.microsoft.com/kb/320727を参照してください。

基本的にやりたいことは、最初の文字が数字かどうかをテストすることです。標準の文字列比較に戻すだけではない場合は、追加の処理を行って数値のテキスト バージョンを取得できます。

このほとんどの並べ替えアルゴリズムを取得すると、比較子を渡すことができます。

于 2010-02-20T00:31:08.853 に答える
1

コンピューターサイエンスでは、プログラミングを学ぶときに、数値をテキストに変換する課題が出されることがあります。お気に入り:

526 = Fivehundredtwentysix

これはおそらく、この場合に必要になるものです。

些細な課題ですが、良い教訓です。

于 2010-02-20T00:18:58.803 に答える
0

他の人の提案を拡張するには:

  1. これの最も難しい部分はおそらく、数字をその数字を表す英語の文字列に変換するコードです - Sani のプログラミング課題です。要件を満たさない可能性のある単純化された例を含めました。
プライベート静的文字列[] 数字名 = 新しい文字列[]
    { "ああ"、"1"、"2"、"3"、"4"、"5"、"6"、"7"、"8"、"9"};
プライベート静的文字列 ReplaceDigits(string s)
{
    文字列 convertSoFar = ""; //パフォーマンスが問題になる場合は、StringBuilder を使用できます。
    for (int charPos = 0; charPos < s.Length; charPos++)
    {
        if (char.IsNumber(s[charPos]))
        {
            //桁に一致する桁名を追加します。
            convertSoFar += digitnames[int.Parse(s[charPos].ToString())];
        }
        そうしないと
        {
            //文字列の先頭の数字の最後に到達しました。
            //残りの s を追加して終了します。
            convertSoFar += s.Substring(charPos);
            壊す;
        }
    }
    convertSoFar を返します。
}

このコードは、「101 だるま」を「oneoone だるま」に、「12 怒れる男」を「onetwo 怒れる男」に変換します。おそらくウェッジのソリューションからわずかに異なる問題まで、より完全なソリューションを構築できます。私はそのコードをテストしておらず、数字の後の文字列を処理するように設計されていませんが、おそらく良いスタートです。

  1. 最新の C# (3.0 以降だと思います) では、IComparable または IComparer を明示的に作成するのではなく、Sort にメソッド名を渡すことができます。これは基本的にマイケルのリンクと同じ考え方です。別の関連するオプションは、外部メソッドを必要としない匿名ラムダ式です。個人的には、この方法の方がコードがきれいに読めると思います。
private static int NumberReplaceingCompare(string strA, string strB)
{
    ReplaceDigits(strA).CompareTo(ReplaceDigits(strB)); を返します。
}
private static void OutputSortedStrings()
{
    リスト文字列 = new List(File.ReadAllLines(@"D:\Working\MyStrings.txt")); // ファイルから (またはどこからでも) 文字列を取得します
    文字列.Sort(NumberReplaceingCompare); //並べ替え、比較関数として NumberReplaceingCompare を使用
    foreach (文字列内の文字列 s)
    {
        System.Console.WriteLine(s);
    }
}
于 2010-02-20T03:30:54.603 に答える